易盾是网易推出的反垃圾云服务,最近准备试用一下,但发现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的更多相关文章

  1. 解读网易易盾新一代IoT安全编译器Maze

    一.网易易盾为什么会推出安全编译器Maze? 随着5G时代的到来,会有越来越多的物联网设备走进我们的生活,然而物联网的终端本身普遍处于白盒环境中,***者很容易获取相关的信息进行***,这个时候如果不 ...

  2. 网易易盾最新一代Java2c加固究竟有什么厉害之处?

    导语:几个月前,网易易盾正式推出Java2c加固.它以独有的"静态保护"技术,使得应用程序中的代码出现"下沉",达到不可逆的效果,兼顾"冷热启动时间& ...

  3. 调用网易有道词典api

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #调用网易有道词典api import urllib import json class Youdao(): ...

  4. 【原创】Python 网易易盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...

  5. 关于js调用外部部署的web api

    没想到多年之后我还得继续写这些东西.... 瀑布汗~ 最近不得不开始研究用web api MVC的项目中,在js文件里,实现点击一个按钮调用外部发布好的api,再从api把值回传给js页面,跳转. 经 ...

  6. selenium自动爬取网易易盾的验证码

    我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型, ...

  7. WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递

    回到目录 上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对 ...

  8. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解

    最近一直在整合WebAPI.Winform界面.手机短信.微信公众号.企业号等功能,希望把它构建成一个大的应用平台,把我所有的产品线完美连接起来,同时也在探索.攻克更多的技术问题,并抽空写写博客,把相 ...

  9. 开发程序过程中遇到的调用Web Api小问题

    在用Umbraco Web Api开发程序时,前端使用React调用Web Api 当时是有一个页面Search.cshtml,把用React产生的脚本代码,在这个页面进行引用 写了一个Api, 调用 ...

随机推荐

  1. 【如何快速的开发一个完整的iOS直播app】(美颜篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重 ...

  2. 2-3. Using Type Deduction

    Type Deduction 发生在编译时期 可以对一般类型,自定义类型进行类型自推导 下面有两个例子: 1. Using auto with a class #include <iostrea ...

  3. POJ 3057 Evacuation 二分图匹配

    每个门每个时间只能出一个人,那就把每个门拆成多个,对应每个时间. 不断增加时间,然后增广,直到最大匹配. //#pragma comment(linker, "/STACK:10240000 ...

  4. FIFO

    FIFO存储器 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序 ...

  5. Maven仓库管理-Nexus

    Maven仓库管理-Nexus @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style& ...

  6. Keep It Simple Stupid!

    Kelly Johnson提出了KISS原则.他是一个飞机工程师以及航空发明家,同时也是一个管理天才,他一生中主要设计了40多架飞机,获得的荣誉相当之多,总之,很牛. 这个原则是对Johnson带领的 ...

  7. 关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转

    还记得我们刚开始学习html时使用的锚节点实现跳转吗? <a href="#target">我想跳转至目标位置</a> <p>第一条</p ...

  8. SRETAN

    SRETAN (sretan.pas/c/cpp) 题目描述 4和7是幸运数字,输入k,输出第k个只含有4和7的数. 输入格式 一行一个数k 输出格式 一行一个数表示答案 样例输入 3 样例输出 44 ...

  9. viewpage 循环滑动播放图片

    一般来说,viewpage 只支持图片的顺序滑动播放,在滑到边界时就再也滑不动了,如果要想继续滑动,只能向两边额外增加一张相片,即把第一张相片的位置放在最后一张图片的后面,给用户的感觉我继续滑就滑到了 ...

  10. py2exe 打包scipy时遇到的问题

    最近写了个小程序,用PyQt5做的界面,写完之后用py2exe打包成独立的exe文件,运行正常. 后来由于需要,调用SciPy.io.loadmat,改写setup.py,打包之后运行错误,提示: T ...