最近在工作中遇到一项新需求,项目需要对接小程序内容安全接口,该接口可根据用户发送的请求自动检测、审核内容,主要用于过滤涉政、不健康言论和鉴别黄图 。官方有三个内容安全接口,分别是imgSecCheck(图片信息)、mediaCheckAsync(语音图片)语音、msgSecCheck(文字信息),结合项目实际,这里着重讲解图片接口 。
文章插图
首先我们看微信小程序官方文档给出的DEMO(一行php代码),过于简洁,完全让人摸不着头绪 。
文章插图
其次来看参数结构,怎么样,FormData是不是很陌生啊,查询到的资料也是和前端相关,这也是本文要讲的重点,咱们先不管它 。下面直接开始码代码 。
具体实现:
1. 读取图片转换为字节数组
System.IO.FileStream fsm = new FileStream ();
fsm = File.OpenRead(ImageUrl);
byte[] formdata = https://www.isolves.com/it/cxkf/yy/C/2019-09-05/ConvertStreamToByteBuffer(fsm);
2. 构造请求方法CheckImg,按照官方文档可以返回一个Json字符串
文章插图
【C#模拟HTTP请求发送二进制文件】/// <summary>
/// 微信内容图片安全检测
/// </summary>
/// <param name="formdata">图片字节数组</param>
/// <param name="imageUrl">图片路径</param>
/// <returns></returns>
public static string CheckImg(byte[] formdata,string imageUrl)
{
var token = GetAccessToken();
string url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + token;
WebClient httpHelper = new WebClient();
MultipartForm multipart = new MultipartForm();
multipart.AddFlie("media", imageUrl, formdata, formdata.Length);
string result = httpHelper.Post(url, multipart);
var json = JObject.Parse(result);
return json.ToString();
}
这样就是整个实现方法了,现在我们再来理清FormData的问题 。什么是FormData?FormData就是表单数据,它以键值对的形式向服务器发送,这个过程是浏览器自动完成的 。在这里我们服务端要对前端浏览器的发送方式进行模拟 。其中WebClient和MultipartForm类是关键 。
WebClinet用来发送POST请求
文章插图
MultipartForm用来构造POST的请求标头并把图片数据写入body
文章插图
注意:name="media”是与官方文档约定好的键值,此处不可更改,不然会找不到请求中的文件数据 。
推荐阅读
- PHP文件访问时提示http 404错误
- HTTP2.0中的Server Push
- https实现原理
- 初识HTTP报文
- 达到物理网卡上限,突然几十万的请求访问Redis的某个key如何解决
- MySQL 优化实施方案
- TCP/IP协议分为哪四层,具体作用是什么?http与tcp区别
- 华为NFC手机模拟加密门禁卡实操
- C++内存池实现
- NFC手机加密卡?卡模拟