易盾是网易推出的反垃圾云服务,最近准备试用一下,但发现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. RPM包的制作

    RPM包的制作 前言 按照其软件包的格式来划分,常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这两类系统分别提供了自己的软件包管理系统和相应的工具. 类RedHat ...

  2. HTML可编辑的select

    HTML可编辑的select实现原理还是用select和input伪装成的! <!DOCTYPE html PUBLIC "-//W3C//Dth XHTML 1.0 Transiti ...

  3. XE3随笔18:实例 - 解析 Google 关键字搜索排名

    同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...

  4. Python 3.5 连接Mysql数据库(pymysql 方式)

    由于 MySQLdb 模块还不支持 Python3.x,官方的Mysql连接包只支持到3.4,所以 Python3.5 如果想连接MySQL需要安装 pymysql 模块. pymysql 模块可以通 ...

  5. SQL:无法解决 equal to 操作的排序规则冲突。

    更改存储过程的时候,在SQL中出现了 “无法解决 equal to 操作的排序规则冲突”错误,网上搜之,发现是表之间元素创建时排序规则不同(一个是collate Chinese_PRC_CI_AI_W ...

  6. paip.语义分析--分词--常见的单音节字词 2_deDuli 单字词 774个

    paip.语义分析--分词--常见的单音节字词 2_deDuli  单字词 774个 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址 ...

  7. 20.cocoapods的安装和使用

    一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...

  8. Tomcat的优化

    Tomcat的优化配置 修改tomcat的config目录下server.xml文件 <Connector port="9021"  protocol="HTTP/ ...

  9. 【转】测试LibreOffice SDK 开发环境配置(Windows)

    原文:http://www.aqcoder.com/blog/detail/id/7441186b-93fd-482c-b4d7-0facd1ee498d 下载与安装 LibreOffice 主页:h ...

  10. ubuntu14.04上Trac配置记录

    系统环境:ubuntu14.04 (并假设Apache2服务可以正常运行) 1. 安装软件: sudo aptitude install trac python-mysqldb 2. 创建数据库Tra ...