您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

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

时间:2019-09-05 16:09:56  来源:  作者:

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



Tags:C#   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
有个项目需要C#环境,需安装mono环境来运行这个C#程序,这里简单记录一下一 安装mono1、下载mono安装源并解压下载地址: http://download.mono-project.com/sources/mono/wget h...【详细内容】
2020-06-22   C#  点击:(0)  评论:(0)  加入收藏
每次新项目的时候,都要从头去找一遍数据库工具类。这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池。 连接池配置<connectionStrings>  <add name="dh_web" c...【详细内容】
2020-04-18   C#  点击:(11)  评论:(0)  加入收藏
介绍:窗体中的文字不仅可以静态地显示,也可以动态的显示效果。实现动态显示文字滚动,文字向左水平滚动 过程:1.创建window应用程序项目,默认窗体为Form1.2.在窗体中添加La...【详细内容】
2020-04-04   C#  点击:(2)  评论:(0)  加入收藏
C#语法&mdash;&mdash;委托,架构的血液本篇文章主要介绍委托的应用。委托是大家最常见的语法了,但会用与精通之间的差别是巨大的。一个程序员如果不能精通委托,那么,他永远无法...【详细内容】
2019-12-23   C#  点击:(23)  评论:(0)  加入收藏
C程序是一组函数和数据类型,就像一把锋利的随身匕首,非常灵活,在高手的手上可以幻化出各种招式,杀人于无形。C++程序是一组函数和类,像一门大炮,扛在肩上很重,炮弹打出去威力很大,但...【详细内容】
2019-12-20   C#  点击:(38)  评论:(0)  加入收藏
世界上只有少数几种语言是多功能的,而没有一个像C#那样干净整洁。...【详细内容】
2019-11-25   C#  点击:(138)  评论:(0)  加入收藏
加密解密在开发中经常用到,比如登录密码加密解密、消息传输加密解密等。但是很多人只会使用不理解其中的原理,这篇文章就带领大家快速学习加密解密的原理和使用...【详细内容】
2019-11-11   C#  点击:(39)  评论:(0)  加入收藏
今天我利用这篇文章给大家讲解一下 C# 中的序列化与反序列化。这两个概念我们在开发中经常用到,但是我们绝大部分只用到了其中的一部分,剩下的部分很多开发人员并不清楚,伸着可以说是不知道。因此我希望通过这篇文章能让...【详细内容】
2019-11-06   C#  点击:(19)  评论:(0)  加入收藏
最近在工作中遇到一项新需求,项目需要对接小程序内容安全接口,该接口可根据用户发送的请求自动检测、审核内容,主要用于过滤涉政、不健康言论和鉴别黄图。官方有三个内容安全接...【详细内容】
2019-09-05   C#  点击:(360)  评论:(0)  加入收藏
作者 | 羽生结弦责编 | 胡雪蕊出品 | CSDN(CSDNnews)在C#中的委托关键字是 Delegate,委托类似于C/C++中函数的指针。是存有对某个方法引用的引用类型变量,可在运行时被改变。一...【详细内容】
2019-08-16   C#  点击:(68)  评论:(0)  加入收藏
串口进行操作的类,其中包括写和读操作,类可设置串口参数、设置接收函数、打开串口资源、关闭串口资源,操作完成后,一定要关闭串口、接收串口数据事件、接收数据出错事件、获取...【详细内容】
2019-07-31   C#  点击:(116)  评论:(0)  加入收藏
Common.Utility比较全面的c#帮助类,各种功能性代码。网上有各式各样的帮助类,公共类,但是比较零碎,这个仓库算是做了一个集合github地址https://github.com/Jimmey-Jiang/Common...【详细内容】
2019-07-31   C#  点击:(258)  评论:(0)  加入收藏
作者 | 朱钢责编 | 郭芮Timer 计时器是在 C# 开发中经常用到的,但是有很多开发人员对它并不了解,今天这篇文就具体讲解一下 C# 中的计时器。在 C# 中存在3种常用的 Timer : Sy...【详细内容】
2019-07-08   C#  点击:(183)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条