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

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

游戏|数码彩彩2024-03-08 7:45:38370A+A-

最近在工作中遇到一项新需求,项目需要对接小程序内容安全接口,该接口可根据用户发送的请求自动检测、审核内容,主要用于过滤涉政、不健康言论和鉴别黄图。官方有三个内容安全接口,分别是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”是与官方文档约定好的键值,此处不可更改,不然会找不到请求中的文件数据。

点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈