C# 调用网易“易盾” Web API
易盾是网易推出的反垃圾云服务,最近准备试用一下,但发现api文档中只提供了Java, Python, PHP的示例代码,却没有C#的示例代码,于是参照Java示例代码用C#实现了一下。
Java中用HashMap构建公共参数与私有参数,C#中则可以用Dictionary:
var parameters = new Dictionary<string, string>();
//公共参数
parameters.Add("secretId", "{secretId}");
parameters.Add("businessId", "{businessId}");
parameters.Add("version", "v2");
parameters.Add("timestamp", CurrentTimeMillis().ToString());
parameters.Add("nonce", new Random().Next().ToString());
//私有参数
parameters.Add("dataId", Guid.NewGuid().ToString());
parameters.Add("content", content);
parameters.Add("dataOpType", "");
parameters.Add("ip", ip);
Java中用 System.currentTimeMillis() 生成 timestamp,C#中没有直接的对应实现,只能另外实现一个(来自C# 实现 Java 的 System.currentTimeMillis() 值):
private long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - new DateTime(, , , , , , DateTimeKind.Utc)).TotalMilliseconds;
}
对于生成签名的操作,Java中稍显复杂,C#中用Lambda一气呵成:
private string GenerateSignature(Dictionary<string, string> parameters, string secretKey)
{
var signatueString = string.Join(string.Empty,
parameters.OrderBy(p => p.Key).Select(p => p.Key + p.Value))
+ secretKey; return string.Join(string.Empty,
MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(signatueString)).Select(s => s.ToString("x2")));
}
对于http请求操作,Java中有HttpClient,C#中也有:
var response = await _httpClient.PostAsync("/v2/text/check",
new FormUrlEncodedContent(parameters));
对于响应结果解析,Java中有JsonParser,C#中有Json.NET:
var responseText = await response.Content.ReadAsStringAsync();
var jObject = JObject.Parse(responseText);
var statusCode = jObject["code"].Value<int>();
if (statusCode == )
{
var action = jObject["result"]["action"].Value<int>();
return action == ;
}
else
{
return false;
}
完整实现代码如下:
public class YiDunCheckSpam : ICheckSpam
{
private const string BASE_ADDRESS = "https://api.aq.163.com/";
private readonly HttpClient _httpClient; public YiDunCheckSpam()
{
_httpClient = new HttpClient();
_httpClient.BaseAddress = new Uri(BASE_ADDRESS);
} public async Task<bool> IsSpamPost(string title, string content, string author, string ip)
{
var parameters = new Dictionary<string, string>();
//公共参数
parameters.Add("secretId", "{secretId}");
parameters.Add("businessId", "{businessId}");
parameters.Add("version", "v2");
parameters.Add("timestamp", CurrentTimeMillis().ToString());
parameters.Add("nonce", new Random().Next().ToString());
//私有参数
parameters.Add("dataId", Guid.NewGuid().ToString());
parameters.Add("content", content);
parameters.Add("dataOpType", "");
parameters.Add("ip", ip);
parameters.Add("title", title);
parameters.Add("nickname", author); var secretKey = "{secretKey}";
var signature = GenerateSignature(parameters, secretKey);
parameters.Add("signature", signature); var response = await _httpClient.PostAsync("/v2/text/check",
new FormUrlEncodedContent(parameters)); var responseText = await response.Content.ReadAsStringAsync();
var jObject = JObject.Parse(responseText);
var statusCode = jObject["code"].Value<int>();
if (statusCode == )
{
var action = jObject["result"]["action"].Value<int>();
return action > ;
}
else
{
return false;
}
} private string GenerateSignature(Dictionary<string, string> parameters, string secretKey)
{
var signatueString = string.Join(string.Empty,
parameters.OrderBy(p => p.Key).Select(p => p.Key + p.Value))
+ secretKey; return string.Join(string.Empty,
MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(signatueString)).Select(s => s.ToString("x2")));
} private long CurrentTimeMillis()
{
return (long)(DateTime.UtcNow - new DateTime(, , , , , , DateTimeKind.Utc)).TotalMilliseconds;
}
}
C# 调用网易“易盾” Web API的更多相关文章
- 解读网易易盾新一代IoT安全编译器Maze
一.网易易盾为什么会推出安全编译器Maze? 随着5G时代的到来,会有越来越多的物联网设备走进我们的生活,然而物联网的终端本身普遍处于白盒环境中,***者很容易获取相关的信息进行***,这个时候如果不 ...
- 网易易盾最新一代Java2c加固究竟有什么厉害之处?
导语:几个月前,网易易盾正式推出Java2c加固.它以独有的"静态保护"技术,使得应用程序中的代码出现"下沉",达到不可逆的效果,兼顾"冷热启动时间& ...
- 调用网易有道词典api
# -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): ...
- 【原创】Python 网易易盾滑块验证
本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...
- 关于js调用外部部署的web api
没想到多年之后我还得继续写这些东西.... 瀑布汗~ 最近不得不开始研究用web api MVC的项目中,在js文件里,实现点击一个按钮调用外部发布好的api,再从api把值回传给js页面,跳转. 经 ...
- selenium自动爬取网易易盾的验证码
我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型, ...
- WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递
回到目录 上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对 ...
- Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解
最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...
- 开发程序过程中遇到的调用Web Api小问题
在用Umbraco Web Api开发程序时,前端使用React调用Web Api 当时是有一个页面Search.cshtml,把用React产生的脚本代码,在这个页面进行引用 写了一个Api, 调用 ...
随机推荐
- 【如何快速的开发一个完整的iOS直播app】(美颜篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重 ...
- 2-3. Using Type Deduction
Type Deduction 发生在编译时期 可以对一般类型,自定义类型进行类型自推导 下面有两个例子: 1. Using auto with a class #include <iostrea ...
- POJ 3057 Evacuation 二分图匹配
每个门每个时间只能出一个人,那就把每个门拆成多个,对应每个时间. 不断增加时间,然后增广,直到最大匹配. //#pragma comment(linker, "/STACK:10240000 ...
- FIFO
FIFO存储器 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序 ...
- Maven仓库管理-Nexus
Maven仓库管理-Nexus @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style& ...
- Keep It Simple Stupid!
Kelly Johnson提出了KISS原则.他是一个飞机工程师以及航空发明家,同时也是一个管理天才,他一生中主要设计了40多架飞机,获得的荣誉相当之多,总之,很牛. 这个原则是对Johnson带领的 ...
- 关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转
还记得我们刚开始学习html时使用的锚节点实现跳转吗? <a href="#target">我想跳转至目标位置</a> <p>第一条</p ...
- SRETAN
SRETAN (sretan.pas/c/cpp) 题目描述 4和7是幸运数字,输入k,输出第k个只含有4和7的数. 输入格式 一行一个数k 输出格式 一行一个数表示答案 样例输入 3 样例输出 44 ...
- viewpage 循环滑动播放图片
一般来说,viewpage 只支持图片的顺序滑动播放,在滑到边界时就再也滑不动了,如果要想继续滑动,只能向两边额外增加一张相片,即把第一张相片的位置放在最后一张图片的后面,给用户的感觉我继续滑就滑到了 ...
- py2exe 打包scipy时遇到的问题
最近写了个小程序,用PyQt5做的界面,写完之后用py2exe打包成独立的exe文件,运行正常. 后来由于需要,调用SciPy.io.loadmat,改写setup.py,打包之后运行错误,提示: T ...