<返回更多

C#模拟HTTP请求发送二进制文件

2019-09-05    
加入收藏

最近在工作中遇到一项新需求,项目需要对接小程序内容安全接口,该接口可根据用户发送的请求自动检测、审核内容,主要用于过滤涉政、不健康言论和鉴别黄图。官方有三个内容安全接口,分别是imgSecCheck(图片信息)mediaCheckAsync(语音图片)语音、msgSecCheck(文字信息),结合项目实际,这里着重讲解图片接口。

C#模拟HTTP请求发送二进制文件

 

首先我们看微信小程序官方文档给出的DEMO(一行php代码),过于简洁,完全让人摸不着头绪。

C#模拟HTTP请求发送二进制文件

 

其次来看参数结构,怎么样,FormData是不是很陌生啊,查询到的资料也是和前端相关,这也是本文要讲的重点,咱们先不管它。下面直接开始码代码。

具体实现:

1. 读取图片转换为字节数组

System.IO.FileStream fsm = new FileStream ();

fsm = File.OpenRead(ImageUrl);

byte[] formdata = 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就是表单数据,它以键值对的形式向服务器发送,这个过程是浏览器自动完成的。在这里我们服务端要对前端浏览器的发送方式进行模拟。其中WebClientMultipartForm类是关键。

WebClinet用来发送POST请求

C#模拟HTTP请求发送二进制文件

 

MultipartForm用来构造POST的请求标头并把图片数据写入body

C#模拟HTTP请求发送二进制文件

 

注意:name="media”是与官方文档约定好的键值,此处不可更改,不然会找不到请求中的文件数据。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>