以往那写的xx154页面个人信息填写页面,如今却wwWxx154CoM怎么一点搜不到了

您的位置: 惊!浙江人众金服用壳公司融资3亿,套路比e租宝还深
惊!浙江人众金服用壳公司融资3亿,套路比e租宝还深
网贷平台中的借款标的明显造假,天南海北的借款人,只要相同借款额度的,居然借款事由、购物品种都一样!老板养的这些员工造假也太不用心了!1天前
平台名称: 金羊金服
平台链接: www.jinyangjinfu.com22小时前
同一公司借的款,分成2次发,标的名字分别是悦嘉盈731期和【限量】悦享盈777期借款金额相同,期限确不同,政策都不允许拆标和期限错配了。
悦嘉盈7...22小时前
之前发现他们虚假发标后,浣熊理财的工作人员换了标的资料图,强行解释借款人多方平台借款,标资料出错的问题,首先不说资料出错你们换有什么用,你们马上又自爆自己平台的... 13:06:18
券上写五千元可用,实际使用时,需要投一万元才能用,自相矛盾!客服说系统有公告,苹果系统不能用。不能用你让我使用什么,系统明显有漏洞,我提出退券,客服说不可以,非...4天前
不知大家对前段时间一个深圳新闻有没有印象? 某金融公司老板女朋友怀孕三胞胎后。老板失踪了,对女朋友和三胞胎不闻不问,最后还威胁还要整死他,有人爆料说那个男的是深...4天前
摘要:犯罪嫌疑人陈庆、犯罪嫌疑单位深圳前海中仁互联网金融服务有限公司(中仁财富)涉嫌集资诈骗一案,已移送深圳市人民检察院审查起诉。4天前
P2P备案进入最后冲刺时刻,却有平台提前退场,坦白“备案通不过”,要求与投资人改合约。近日,上海居民苏先生向南都记者爆料,其投资的P2P平台“钱富宝Pro”,单... 22:30:12
新博贷宣传是上市公司控股,实际上上市公司早已悄无声息的退了出去,法人田曙光和他老婆占股41%,这两人早就在法院被人告了好几回了,欠了外债接近2000万没还。新博... 19:09:40
4月9日,城城理财高管被公安带走协助调查。根据投资人的爆料,城城理财的客服人员已在投资人QQ群中确认了该消息。2天前网易云易盾帮助中心
HTTPS 协议。
易盾反垃圾云服务提供的所有接口,均支持 POST/GET 方法。当参数名与参数值拼装起来的 URL 长度小于 1024 个字符时,可以用GET发起请求;当参数类型含 byte[] 类型或拼装好的请求URL过长时,必须用 POST 发起请求。建议所有API调用都使用 POST 方法请求。
所有接口的请求和响应数据编码皆为 utf-8。
API请求结构
具体API接口地址
如 https://as.dun.163yun.com/vx/xx/check
每个接口都包含的通用参数
每个接口特有的参数
详见每个API接口定义
公共参数是用于标识产品和接口鉴权目的的参数,如非必要,在每个接口单独的接口文档中不再对这些参数进行说明,每次请求均需要携带这些参数。
请求公共参数
产品秘钥 id ,由易盾反垃圾云服务分配,产品标识
businessId
业务id ,由易盾反垃圾云服务分配,业务标识
接口版本号,可选值看具体接口
请求当前 UNIX 时间戳,请注意服务器时间是否同步
随机正整数,与 timestamp 联合起来,用于防止重放攻击
请求签名,用来验证此次请求的合法性,具体算法见
响应通用字段
所有接口响应值采用 json 格式, 如无特殊说明,每次请求的返回值中,都包含下面字段:
接口调用状态,200:正常,其他值:调用出错,返回码见
结果说明,如果接口调用出错,那么返回错误描述,成功返回 ok
接口返回结果,各个接口自定义,若为空表示返回正常
响应返回码
响应返回码(code)反应了易盾反垃圾云服务 API 调用和执行的概要结果。当返回码不为 200 时, 表示请求未正常执行,返回码描述 (msg) 对该结果进行了细化补充,用户可根据返回码判断 API 的执行情况。
所有接口调用返回值均包含 code 和 msg 字段, code 为返回码值,msg 为返回码描述信息,返回码表如下:
返回码描述
接口调用成功
bad request
请求缺少 secretId 或 businessId
businessId无效或过期
业务配置不存在
param error
请求参数异常
signature failure
签名验证失败,请重新参考demo签名代码
high frequency
请求频率或数量超过限制
param len over limit
请求长度超过限制
target version limit
业务版本限制,如无人工服务版本,无法请求离线结果获取接口
image download failure
图片下载失败
request expired
replay attack
service unavailable
易盾反垃圾云服务使用签名方法对接口进行鉴权,所有接口每一次请求都需要包含签名信息(signature 参数),以验证用户身份,防止信息被恶意篡改。
申请安全凭证
在第一次使用 API 之前,需申请安全凭证,安全凭证包括 SecretId 和 SecretKey ,SecretId 是用于标识 API 调用者的身份,SecretKey 是用于加密签名字符串和服务器端验证签名字符串的密钥。SecretKey 必须严格保管,避免泄露。
签名生成算法
签名生成方法如下:
对所有请求参数(包括公有参数和私有参数,但不包括 signature 参数),按照参数名ASCII码表升序顺序排序。如:foo=1, bar=2, foo_bar=3, baz=4 排序后的顺序是 bar=2, baz=4, foo=1, foobar=3。
将排序好的参数名和参数值构造成字符串,格式为:key1+value1+key2+value2… 。根据上面的示例得到的构造结果为:bar2baz4foo1foobar3 。
选择与 secretId 配对的 secretKey ,加到上一步构造好的参数字符串之后,如 secretKey=6308afb129ea021d07591 ,则最后的参数字符串为 bar2baz4foo1foobar36308afb129ea021d07591。
把上一步骤拼装好的字符串采用 utf-8 编码,使用 MD5 算法对字符串进行摘要,计算得到 signature 参数值,将其加入到接口请求参数中即可。
签名生成示例代码:
* 生成签名信息
* @param secretKey 产品私钥
* @param params 接口请求参数名和参数值map,不包括signature参数名
* @throws UnsupportedEncodingException
public static String genSignature(String secretKey, Map&String, String& params) throws UnsupportedEncodingException {
// 1. 参数名按照ASCII码表升序排序
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
// 2. 按照排序拼接参数名与参数值
StringBuffer paramBuffer = new StringBuffer();
for (String key : keys) {
paramBuffer.append(key).append(params.get(key) == null ? && : params.get(key));
// 3. 将secretKey拼接到最后
paramBuffer.append(secretKey);
// 4. MD5是128位长度的摘要算法,用16进制表示,一个十六进制的字符能表示4个位,所以签名后的字符串长度固定为32个十六进制字符。
return DigestUtils.md5Hex(paramBuffer.toString().getBytes(&UTF-8&));
#!/usr/bin/env python
# -*- coding: utf-8 -*-
&&&生成签名信息
secretKey 产品私钥
params 接口请求参数,不包括signature参数
def gen_signature(secretKey, params=None):
params_str = &&
for k in sorted(params.keys()):
params_str += str(k)+ str(params[k])
params_str += secretKey
return hashlib.md5(params_str).hexdigest()
* 生成签名信息
* $secretKey 产品私钥
* $params 接口请求参数,不包括signature参数
function gen_signature($secretKey,$params){
ksort($params);
foreach($params as $key=&$value){
if($value !== null) {
$buff .= $secretK
return md5(mb_convert_encoding($buff, &utf8&, &auto&));
// 根据secretKey和parameters生成签名
public static String genSignature(String secretKey, Dictionary&String, String& parameters)
parameters = parameters.OrderBy(o =& o.Key).ToDictionary(o =& o.Key, p =& p.Value);
StringBuilder builder = new StringBuilder();
foreach (KeyValuePair&String, String& kv in parameters)
builder.Append(kv.Key).Append(kv.Value);
builder.Append(secretKey);
String tmp = builder.ToString();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(Encoding.UTF8.GetBytes(tmp));
builder.Clear();
foreach (byte b in result)
builder.Append(b.ToString(&x2&).ToLower());
return builder.ToString();
var genSignature=function(secretKey,paramsJson){
var sorter=function(paramsJson){
var sortedJson={};
var sortedKeys=Object.keys(paramsJson).sort();
for(var i=0;i&sortedKeys.i++){
sortedJson[sortedKeys[i]] = paramsJson[sortedKeys[i]]
return sortedJ
var sortedParam=sorter(paramsJson);
var needSignatureStr=&&;
for(var key in sortedParam){
var value=sortedParam[key];
needSignatureStr=needSignatureStr+key+
needSignatureStr+=secretK
var md5er = crypto.createHash('md5');//MD5加密工具
md5er.update(needSignatureStr,&UTF-8&);
return md5er.digest('hex');
文本接口调用流程
易盾文本反垃圾服务对外提供在线实时检测和离线检测结果获取两类接口。
在线实时检测接口是文本反垃圾服务实时反垃圾引擎检测接口,该接口实时返回检测结果,产品可以根据该结果对数据进行初步过滤。
离线检测结果获取接口返回文本反垃圾服务离线反垃圾引擎检测结果及部分人工质检结果,产品可根据该结果做进一步数据过滤。
以下是易盾文本反垃圾服务接口调用示意图:
文本在线检测
根据发布的内容、帐号、IP地址、设备ID等信息综合判断该条信息是否需要拦截。接口同步返回易盾反垃圾云服务实时反垃圾引擎检测结果,产品可以根据该结果对数据进行初步过滤。该接口返回结果状态分以下三种:
不通过:表示是确认内容非法,产品可对数据做删除隐藏处理。
嫌疑:表示该内容疑似非法,需易盾反垃圾云服务离线检测模块进一步确认处理,确认结果需产品自行定期调用获取,产品对嫌疑数据可以做特殊策略处理,如本人可见等。
通过:表示易盾反垃圾云服务实时反垃圾引擎未识别为非法内容,产品对该类数据可以直接放过,发表成功。易盾反垃圾云服务离线检测模块也可能会对这部分数据做进一步分析处理,分析结果需产品自行定期调用获取。
公共参数已省略,详细见 ,其他参数如下:
数据唯一标识,能够根据该值定位到该条数据,如对数据结果有异议,可以发送该值给客户经理查询
用户发表内容,建议对内容中JSON、表情符、HTML标签、UBB标签等做过滤,只传递纯文本,以减少误判概率。请注意为了检测效果和性能,如果该字段长度超过1万字符,会截取前面1万字符进行检测和存储。
子数据类型,与易盾反垃圾云服务约定即可
用户IP地址
用户唯一标识,如果无需登录则为空
deviceType
用户设备类型,1:web, 2:wap, 3:android, 4:iphone, 5:ipad, 6:pc, 7:wp
用户设备 id
数据回调参数,调用方根据业务情况自行设计,当调用文本离线结果获取接口时,该接口会原样返回该字段,详细见。作为数据处理标识,因此该字段应该设计为能唯一定位到该次请求的数据结构,如对用户的昵称进行检测,dataId可设为用户标识(用户ID),用户修改多次,每次请求数据的dataId可能一致,但是callback参数可以设计成定位该次请求的数据结构,比如callback字段设计成json,包含dataId和请求的时间戳等信息,当然如果不想做区分,也可以直接把callback设置成dataId的值。
publishTime
发表时间,UNIX 时间戳(毫秒值)
接口版本v3.1
响应字段如下,响应通用字段已省略,详细见:
result 数据结构
检测结果,0:通过,1:嫌疑,2:不通过
本次请求数据标识,可以根据该标识查询数据最新结果
labels 数据结构
分类信息,100:色情,200:广告,300,暴恐,400:违禁,500:涉政,600:谩骂,700:灌水
分类级别,1:不确定,2:确定
details 数据结构
线索信息,用于定位文本中有问题的部分,辅助人工审核
/** 产品密钥ID,产品标识 */
private final static String SECRETID = &your_secret_id&;
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
private final static String SECRETKEY = &your_secret_key&;
/** 业务ID,易盾根据产品业务特点分配 */
private final static String BUSINESSID = &your_business_id&;
/** 易盾反垃圾云服务文本在线检测接口地址 */
private final static String API_URL = &https://as.dun.163yun.com/v3/text/check&;
/** 实例化HttpClient,发送http请求使用,可根据需要自行调参 */
private static HttpClient httpClient = HttpClient4Utils.createHttpClient(100, 20, , 2000);
* @param args
* @throws Exception
public static void main(String[] args) throws Exception {
Map&String, String& params = new HashMap&String, String&();
// 1.设置公共参数
params.put(&secretId&, SECRETID);
params.put(&businessId&, BUSINESSID);
params.put(&version&, &v3.1&);
params.put(&timestamp&, String.valueOf(System.currentTimeMillis()));
params.put(&nonce&, String.valueOf(new Random().nextInt()));
// 2.设置私有参数
params.put(&dataId&, &ebfcad1c-dba1-490c-b4de-e784c2691768&);
params.put(&content&, &易盾测试内容!v3接口! &);
params.put(&dataType&, &1&);
params.put(&ip&, &123.115.77.137&);
params.put(&account&, &&);
params.put(&deviceType&, &4&);
params.put(&deviceId&, &92B1E5AA-4C3D--86E&);
params.put(&callback&, &ebfcad1c-dba1-490c-b4de-e784c2691768&);
params.put(&publishTime&, String.valueOf(System.currentTimeMillis()));
// 3.生成签名信息
String signature = SignatureUtils.genSignature(SECRETKEY, params);
params.put(&signature&, signature);
// 4.发送HTTP请求,这里使用的是HttpClient工具包,产品可自行选择自己熟悉的工具包发送请求
String response = HttpClient4Utils.sendPost(httpClient, API_URL, params, Consts.UTF_8);
// 5.解析接口返回值
JsonObject jObject = new JsonParser().parse(response).getAsJsonObject();
int code = jObject.get(&code&).getAsInt();
String msg = jObject.get(&msg&).getAsString();
if (code == 200) {
JsonObject resultObject = jObject.getAsJsonObject(&result&);
int action = resultObject.get(&action&).getAsInt();
String taskId = resultObject.get(&taskId&).getAsString();
JsonArray labelArray = resultObject.getAsJsonArray(&labels&);
/*for (JsonElement labelElement : labelArray) {
JsonObject lObject = labelElement.getAsJsonObject();
int label = lObject.get(&label&).getAsInt();
int level = lObject.get(&level&).getAsInt();
JsonObject detailsObject=lObject.getAsJsonObject(&details&);
JsonArray hintArray=detailsObject.getAsJsonArray(&hint&);
if (action == 0) {
System.out.println(String.format(&taskId=%s,文本机器检测结果:通过&, taskId));
} else if (action == 1) {
System.out.println(String.format(&taskId=%s,文本机器检测结果:嫌疑,需人工复审,分类信息如下:%s&, taskId, labelArray.toString()));
} else if (action == 2) {
System.out.println(String.format(&taskId=%s,文本机器检测结果:不通过,分类信息如下:%s&, taskId, labelArray.toString()));
System.out.println(String.format(&ERROR: code=%s, msg=%s&, code, msg));
#!/usr/bin/env python
# -*- coding: utf-8 -*-
&&&易盾文本在线检测接口python示例代码
接口文档: http://dun.163.com/api.html
python版本:python2.7
1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值
2. $ python text_check_api_demo.py
__author__ = 'yidun-dev'
__date__ = ''
__version__ = '0.1-dev'
import hashlib
import time
import random
import urllib
import urllib2
import json
class TextCheckAPIDemo(object):
&&&文本在线检测接口示例代码&&&
API_URL = &https://as.dun.163yun.com/v3/text/check&
VERSION = &v3.1&
def __init__(self, secret_id, secret_key, business_id):
secret_id (str) 产品密钥ID,产品标识
secret_key (str) 产品私有密钥,服务端生成签名信息使用
business_id (str) 业务ID,易盾根据产品业务特点分配
self.secret_id = secret_id
self.secret_key = secret_key
self.business_id = business_id
def gen_signature(self, params=None):
&&&生成签名信息
params (object) 请求参数
参数签名md5值
for k in sorted(params.keys()):
buff += str(k)+ str(params[k])
buff += self.secret_key
return hashlib.md5(buff).hexdigest()
def check(self, params):
&&&请求易盾接口
params (object) 请求参数
请求结果,json格式
params[&secretId&] = self.secret_id
params[&businessId&] = self.business_id
params[&version&] = self.VERSION
params[&timestamp&] = int(time.time() * 1000)
params[&nonce&] = int(random.random()*)
params[&signature&] = self.gen_signature(params)
params = urllib.urlencode(params)
request = urllib2.Request(self.API_URL, params)
content = urllib2.urlopen(request, timeout=1).read()
return json.loads(content)
except Exception, ex:
print &调用API接口失败:&, str(ex)
if __name__ == &__main__&:
&&&示例代码入口&&&
SECRET_ID = &your_secret_id& # 产品密钥ID,产品标识
SECRET_KEY = &your_secret_key& # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
BUSINESS_ID = &your_business_id& # 业务ID,易盾根据产品业务特点分配
text_api = TextCheckAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID)
params = {
&dataId&: &ebfcad1c-dba1-490c-b4de-e784c2691768&,
&content&: &易盾测试内容!&,
&dataType&: &1&,
&ip&: &123.115.77.137&,
&account&: &&,
&deviceType&: &4&,
&deviceId&: &92B1E5AA-4C3D--86E&,
&callback&: &ebfcad1c-dba1-490c-b4de-e784c2691768&,
&publishTime&: str(int(time.time() * 1000))
ret = text_api.check(params)
if ret[&code&] == 200:
action = ret[&result&][&action&]
taskId = ret[&result&][&taskId&]
labelArray=json.dumps(ret[&result&][&labels&],ensure_ascii=False)
if action == 0:
print &taskId=%s,文本机器检测结果:通过& % (taskId)
elif action == 1:
print &taskId=%s,文本机器检测结果:嫌疑,需人工复审,分类信息如下:%s& %(taskId,labelArray)
elif action == 2:
print &taskId=%s,文本机器检测结果:不通过,分类信息如下:%s& % (taskId,labelArray)
print &ERROR: ret.code=%s, ret.msg=%s& % (ret[&code&], ret[&msg&])
/** 产品密钥ID,产品标识 */
define(&SECRETID&, &your_secret_id&);
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
define(&SECRETKEY&, &your_secret_key&);
/** 业务ID,易盾根据产品业务特点分配 */
define(&BUSINESSID&, &your_business_id&);
/** 易盾反垃圾云服务文本在线检测接口地址 */
define(&API_URL&, &https://as.dun.163yun.com/v3/text/check&);
/** api version */
define(&VERSION&, &v3.1&);
/** API timeout*/
define(&API_TIMEOUT&, 2);
/** php内部使用的字符串编码 */
define(&INTERNAL_STRING_CHARSET&, &auto&);
* 计算参数签名
* $params 请求参数
* $secretKey secretKey
function gen_signature($secretKey, $params){
ksort($params);
foreach($params as $key=&$value){
if($value !== null) {
$buff .= $secretK
return md5($buff);
* 将输入数据的编码统一转换成utf8
* @params 输入的参数
function toUtf8($params){
$utf8s = array();
foreach ($params as $key =& $value) {
$utf8s[$key] = is_string($value) ? mb_convert_encoding($value, &utf8&, INTERNAL_STRING_CHARSET) : $
return $utf8s;
* 反垃圾请求接口简单封装
* $params 请求参数
function check($params){
$params[&secretId&] = SECRETID;
$params[&businessId&] = BUSINESSID;
$params[&version&] = VERSION;
$params[&timestamp&] = sprintf(&%d&, round(microtime(true)*1000));// time in milliseconds
$params[&nonce&] = sprintf(&%d&, rand()); // random int
$params = toUtf8($params);
$params[&signature&] = gen_signature(SECRETKEY, $params);
// var_dump($params);
$options = array(
'http' =& array(
=& &Content-type: application/x-www-form-urlencoded\r\n&,
=& 'POST',
'timeout' =& API_TIMEOUT, // read timeout in seconds
'content' =& http_build_query($params),
= stream_context_create($options);
$result = file_get_contents(API_URL, false, $context);
if($result === FALSE){
return array(&code&=&500, &msg&=&&file_get_contents failed.&);
return json_decode($result, true);
// 简单测试
function main(){
echo &mb_internal_encoding=&.mb_internal_encoding().&\n&;
$params = array(
&dataId&=&&ebfcad1c-dba1-490c-b4de-e784c2691768&,
&content&=&&易盾测试内容!v3接口!&,
&dataType&=&&1&,
&ip&=&&123.115.77.137&,
&account&=&&&,
&deviceType&=&&4&,
&deviceId&=&&92B1E5AA-4C3D--86E&,
&callback&=&&ebfcad1c-dba1-490c-b4de-e784c2691768&,
&publishTime&=&round(microtime(true)*1000)
$ret = check($params);
var_dump($ret);
if ($ret[&code&] == 200) {
$action = $ret[&result&][&action&];
$taskId = $ret[&result&][&taskId&];
$labelArray = $ret[&result&][&labels&];
if ($action == 0) {
echo &taskId={$taskId},文本机器检测结果:通过\n&;
} else if ($action == 1) {
echo &taskId={$taskId},文本机器检测结果:嫌疑,需人工复审,分类信息如下:&.json_encode($labelArray).&\n&;
} else if ($action == 2) {
echo &taskId={$taskId},文本机器检测结果:不通过,分类信息如下:&.json_encode($labelArray).&\n&;
var_dump($ret); // error handler
using Newtonsoft.Json.L
using System.Collections.G
using System.Net.H
namespace Com.Netease.Is.Antispam.Demo
class TextCheckApiDemo
public static void textCheck()
/** 产品密钥ID,产品标识 */
String secretId = &your_secret_id&;
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
String secretKey = &your_secret_key&;
/** 业务ID,易盾根据产品业务特点分配 */
String businessId = &your_business_id&;
/** 易盾反垃圾云服务文本在线检测接口地址 */
String apiUrl = &https://as.dun.163yun.com/v3/text/check&;
Dictionary&String, String& parameters = new Dictionary&String, String&();
long curr = (long)(DateTime.UtcNow - new DateTime(, 0, 0, 0, DateTimeKind.Utc)).TotalM
String time = curr.ToString();
// 1.设置公共参数
parameters.Add(&secretId&, secretId);
parameters.Add(&businessId&, businessId);
parameters.Add(&version&, &v3.1&);
parameters.Add(&timestamp&, time);
parameters.Add(&nonce&, new Random().Next().ToString());
// 2.设置私有参数
parameters.Add(&dataId&, &ebfcad1c-dba1-490c-b4de-e784c2691768&);
parameters.Add(&content&, &易盾测试内容!v3接口!&);
parameters.Add(&dataType&, &1&);
parameters.Add(&ip&, &123.115.77.137&);
parameters.Add(&account&, &&);
parameters.Add(&deviceType&, &4&);
parameters.Add(&deviceId&, &92B1E5AA-4C3D--86E&);
parameters.Add(&callback&, &ebfcad1c-dba1-490c-b4de-e784c2691768&);
parameters.Add(&publishTime&, time);
// 3.生成签名信息
String signature = Utils.genSignature(secretKey, parameters);
parameters.Add(&signature&, signature);
// 4.发送HTTP请求
HttpClient client = Utils.makeHttpClient();
String result = Utils.doPost(client, apiUrl, parameters, 1000);
Console.WriteLine(result);
if(result != null)
JObject ret = JObject.Parse(result);
int code = ret.GetValue(&code&).ToObject&Int32&();
String msg = ret.GetValue(&msg&).ToObject&String&();
if (code == 200)
JObject resultObject = (JObject)ret[&result&];
String taskId = resultObject[&taskId&].ToObject&String&();
int action = resultObject[&action&].ToObject&Int32&();
JArray labelArray = (JArray)resultObject.SelectToken(&labels&);
if (action == 0)
Console.WriteLine(String.Format(&taskId={0},文本机器检测结果:通过&, taskId));
else if (action == 1)
Console.WriteLine(String.Format(&taskId={0},文本机器检测结果:嫌疑,需人工复审,分类信息如下:{1}&, taskId, labelArray));
else if (action == 2)
Console.WriteLine(String.Format(&taskId={0},文本机器检测结果:不通过,分类信息如下:{1}&, taskId, labelArray));
Console.WriteLine(String.Format(&ERROR: code={0}, msg={1}&, code, msg));
Console.WriteLine(&Request failed!&);
var utils=require(&./utils&);
//产品密钥ID,产品标识
var secretId=&your_secret_id&;
// 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
var secretKey=&your_secret_key&;
// 业务ID,易盾根据产品业务特点分配
var businessId=&your_business_id&;
// 易盾反垃圾云服务文本在线检测接口地址
var apiurl=&https://as.dun.163yun.com/v3/text/check&;
//请求参数
var post_data = {
// 1.设置公有有参数
secretId:secretId,
businessId:businessId,
version:&v3.1&,
timestamp:new Date().getTime(),
nonce:utils.noncer(),
// 2.设置私有参数
dataId:&ebfcad1c-dba1-490c-b4de-e784c2691768&,
content:&易盾测试内容!v3接口!&,
ip:&123.115.77.137&,
dataType:&1&,
account:&&,
deviceType:&4&,
deviceId:&92B1E5AA-4C3D--86E&,
callback:&ebfcad1c-dba1-490c-b4de-e784c2691768&,
publishTime:new Date().getTime()
var signature=utils.genSignature(secretKey,post_data);
post_data.signature=
//http请求结果
var responseCallback=function(responseData){
var data = JSON.parse(responseData);
var code=data.
var msg=data.
if(code==200){
var result=data.
var taskId=result.taskId;
var action=result.
var labelArray=result.
if(action==0){
console.log(&taskId=&+taskId+&,文本机器检测结果:通过&)
}else if(action==1){
console.log(&taskId=&+taskId+&,文本机器检测结果:嫌疑,需人工复审,分类信息如下:&+JSON.stringify(labelArray))
}else if(action==2){
console.log(&taskId=&+taskId+&,文本机器检测结果:不通过,分类信息如下:&+JSON.stringify(labelArray))
console.log('ERROR:code=' + code+',msg='+msg);
utils.sendHttpRequest(apiurl,&POST&,post_data,responseCallback);
结果为不通过时,输出示例如下:
注:分类信息,100:色情,200:广告,300:暴恐,400:违禁,500:涉政,600:谩骂,700:灌水
&code&: 200,
&msg&: &ok&,
&result&: {
&taskId&: &c9f34783bdce47e&,
&action&: 2,
&labels&: [
&label&: 100,
&level&: 2,
&details&: {
&xxx&,&ooo&
结果为通过时,输出示例如下:
&code&: 200,
&msg&: &ok&,
&result&: {
&taskId&: &c9f34783bdce47e&,
&action&: 0,
&labels&: []
文本离线结果获取
在线检测接口结果中嫌疑的数据,会进行离线分析和人工审核,这些数据的离线结果需要客户通过该接口进行定时获取。获取离线处理的数据后,下次调用,不会再次返回之前获取过的离线数据。接口对请求频率做了限制,请求频率过快服务器会拒绝处理,建议30秒获取一次。
该接口参数与请求公共参数一致,详细见
接口版本v3.1
响应字段如下,响应通用字段已省略,详细见 :
result 数组数据结构
检测结果,0:通过,2:不通过
在线接口检测返回的数据请求标识,可以根据该标识查询数据最新结果
产品调用传递的 callback 字段数据。
labels 数据结构
分类信息,100:色情,200:广告,300:暴恐,400:违禁,500:涉政,600:谩骂,700:灌水
分类级别,1:不确定,2:确定
details 数据结构
线索信息,用于定位文本中有问题的部分,辅助人工审核
/** 产品密钥ID,产品标识 */
private final static String SECRETID = &your_secret_id&;
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
private final static String SECRETKEY = &your_secret_key&;
/** 业务ID,易盾根据产品业务特点分配 */
private final static String BUSINESSID = &your_business_id&;
/** 易盾反垃圾云服务文本离线检测结果获取接口地址 */
private final static String API_URL = &https://as.dun.163yun.com/v3/text/callback/results&;
/** 实例化HttpClient,发送http请求使用,可根据需要自行调参 */
private static HttpClient httpClient = HttpClient4Utils.createHttpClient(100, 20, 1, 2000);
* @param args
* @throws Exception
public static void main(String[] args) throws Exception {
Map&String, String& params = new HashMap&String, String&();
// 1.设置公共参数
params.put(&secretId&, SECRETID);
params.put(&businessId&, BUSINESSID);
params.put(&version&, &v3.1&);
params.put(&timestamp&, String.valueOf(System.currentTimeMillis()));
params.put(&nonce&, String.valueOf(new Random().nextInt()));
// 2.生成签名信息
String signature = SignatureUtils.genSignature(SECRETKEY, params);
params.put(&signature&, signature);
// 3.发送HTTP请求,这里使用的是HttpClient工具包,产品可自行选择自己熟悉的工具包发送请求
String response = HttpClient4Utils.sendPost(httpClient, API_URL, params, Consts.UTF_8);
// 4.解析接口返回值
JsonObject resultObject = new JsonParser().parse(response).getAsJsonObject();
int code = resultObject.get(&code&).getAsInt();
String msg = resultObject.get(&msg&).getAsString();
if (code == 200) {
JsonArray resultArray = resultObject.getAsJsonArray(&result&);
if (resultArray.size() == 0) {
System.out.println(&暂时没有人工复审结果需要获取,请稍后重试!&);
for (JsonElement jsonElement : resultArray) {
JsonObject jObject = jsonElement.getAsJsonObject();
int action = jObject.get(&action&).getAsInt();
String taskId = jObject.get(&taskId&).getAsString();
String callback = jObject.get(&callback&).getAsString();
JsonArray labelArray = jObject.getAsJsonArray(&labels&);
/*for (JsonElement labelElement : labelArray) {
JsonObject lObject = labelElement.getAsJsonObject();
int label = lObject.get(&label&).getAsInt();
int level = lObject.get(&level&).getAsInt();
JsonObject detailsObject=lObject.getAsJsonObject(&details&);
JsonArray hintArray=detailsObject.getAsJsonArray(&hint&);
if (action == 0) {
System.out.println(String.format(&taskId=%s,callback=%s,文本人工复审结果:通过&, taskId, callback));
} else if (action == 2) {
System.out.println(String.format(&taskId=%s,callback=%s,文本人工复审结果:不通过,分类信息如下:%s&, taskId, callback,
labelArray.toString()));
System.out.println(String.format(&ERROR: code=%s, msg=%s&, code, msg));
#!/usr/bin/env python
# -*- coding: utf-8 -*-
&&&易盾文本离线检测结果获取接口python示例代码
接口文档: http://dun.163.com/api.html
python版本:python2.7
1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值
2. $ python text_check_callback_demo.py
__author__ = 'yidun-dev'
__date__ = ''
__version__ = '0.1-dev'
import hashlib
import time
import random
import urllib
import urllib2
import json
class TextCheckCallbackAPIDemo(object):
&&&文本离线检测结果获取接口示例代码&&&
API_URL = &https://as.dun.163yun.com/v3/text/callback/results&
VERSION = &v3.1&
def __init__(self, secret_id, secret_key, business_id):
secret_id (str) 产品密钥ID,产品标识
secret_key (str) 产品私有密钥,服务端生成签名信息使用
business_id (str) 业务ID,易盾根据产品业务特点分配
self.secret_id = secret_id
self.secret_key = secret_key
self.business_id = business_id
def gen_signature(self, params=None):
&&&生成签名信息
params (object) 请求参数
参数签名md5值
for k in sorted(params.keys()):
buff += str(k)+ str(params[k])
buff += self.secret_key
return hashlib.md5(buff).hexdigest()
def check(self):
&&&请求易盾接口
请求结果,json格式
params = {}
params[&secretId&] = self.secret_id
params[&businessId&] = self.business_id
params[&version&] = self.VERSION
params[&timestamp&] = int(time.time() * 1000)
params[&nonce&] = int(random.random()*)
params[&signature&] = self.gen_signature(params)
params = urllib.urlencode(params)
request = urllib2.Request(self.API_URL, params)
content = urllib2.urlopen(request, timeout=10).read()
return json.loads(content)
except Exception, ex:
print &调用API接口失败:&, str(ex)
if __name__ == &__main__&:
&&&示例代码入口&&&
SECRET_ID = &your_secret_id& # 产品密钥ID,产品标识
SECRET_KEY = &your_secret_key& # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
BUSINESS_ID = &your_business_id& # 业务ID,易盾根据产品业务特点分配
text_check_callback_api = TextCheckCallbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID)
ret = text_check_callback_api.check()
if ret[&code&] == 200:
if len(ret[&result&])==0:
print &暂时没有人工复审结果需要获取,请稍后重试!&
for result in ret[&result&]:
taskId = result[&taskId&]
callback=result[&callback&]
labelArray=json.dumps(result[&labels&],ensure_ascii=False)
if result[&action&]==0:
print &taskId=%s,callback=%s,文本人工复审结果:通过& %(taskId,callback)
print &taskId=%s,callback=%s,文本人工复审结果:不通过,分类信息如下:%s& %(taskId,callback,labelArray)
print &ERROR: code=%s, msg=%s& % (ret[&code&], ret[&msg&])
/** 产品密钥ID,产品标识 */
define(&SECRETID&, &your_secret_id&);
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
define(&SECRETKEY&, &your_secret_key&);
/** 业务ID,易盾根据产品业务特点分配 */
define(&BUSINESSID&, &your_business_id&);
/** 易盾反垃圾云服务文本离线检测结果获取接口地址 */
define(&API_URL&, &https://as.dun.163yun.com/v3/text/callback/results&);
/** api version */
define(&VERSION&, &v3.1&);
/** API timeout*/
define(&API_TIMEOUT&, 10);
/** php内部使用的字符串编码 */
define(&INTERNAL_STRING_CHARSET&, &auto&);
* 计算参数签名
* $params 请求参数
* $secretKey secretKey
function gen_signature($secretKey, $params){
ksort($params);
foreach($params as $key=&$value){
if($value !== null) {
$buff .= $secretK
return md5($buff);
* 将输入数据的编码统一转换成utf8
* @params 输入的参数
function toUtf8($params){
$utf8s = array();
foreach ($params as $key =& $value) {
$utf8s[$key] = is_string($value) ? mb_convert_encoding($value, &utf8&, INTERNAL_STRING_CHARSET) : $
return $utf8s;
* 反垃圾请求接口简单封装
* $params 请求参数
function check(){
$params = array();
$params[&secretId&] = SECRETID;
$params[&businessId&] = BUSINESSID;
$params[&version&] = VERSION;
$params[&timestamp&] = sprintf(&%d&, round(microtime(true)*1000));// time in milliseconds
$params[&nonce&] = sprintf(&%d&, rand()); // random int
$params = toUtf8($params);
$params[&signature&] = gen_signature(SECRETKEY, $params);
// var_dump($params);
$options = array(
'http' =& array(
=& &Content-type: application/x-www-form-urlencoded\r\n&,
=& 'POST',
'timeout' =& API_TIMEOUT, // read timeout in seconds
'content' =& http_build_query($params),
var_dump($params);
= stream_context_create($options);
$result = file_get_contents(API_URL, false, $context);
if($result === FALSE){
return array(&code&=&500, &msg&=&&file_get_contents failed.&);
return json_decode($result, true);
// 简单测试
function main(){
echo &mb_internal_encoding=&.mb_internal_encoding().&\n&;
$ret = check();
var_dump($ret);
if ($ret[&code&] == 200) {
$result = $ret[&result&];
if(empty($result)){
echo &暂时没有文本人工复审结果需要获取,请稍后重试!&;
foreach($result as $index =& $value){
$action = $value[&action&];
$taskId = $value[&taskId&];
$callback = $value[&callback&];
$labelArray = $value[&labels&];
if ($action == 0) {
echo &taskId={$taskId},callback={$callback},文本人工复审结果:通过\n&;
} else if ($action == 2) {
echo &taskId={$taskId},callback={$callback},文本人工复审结果:不通过,分类信息如下:&.json_encode($labelArray).&\n&;
var_dump($ret);
using Newtonsoft.Json.L
using System.Collections.G
using System.Net.H
namespace Com.Netease.Is.Antispam.Demo
class TextCallbackDemo
public static void textCallBack()
/** 产品密钥ID,产品标识 */
String secretId = &your_secret_id&;
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
String secretKey = &your_secret_key&;
/** 业务ID,易盾根据产品业务特点分配 */
String businessId = &your_business_id&;
/** 易盾反垃圾云服务文本离线检测结果获取接口地址 */
String apiUrl = &https://as.dun.163yun.com/v3/text/callback/results&;
Dictionary&String, String& parameters = new Dictionary&String, String&();
long curr = (long)(DateTime.UtcNow - new DateTime(, 0, 0, 0, DateTimeKind.Utc)).TotalM
String time = curr.ToString();
// 1.设置公共参数
parameters.Add(&secretId&, secretId);
parameters.Add(&businessId&, businessId);
parameters.Add(&version&, &v3.1&);
parameters.Add(&timestamp&, time);
parameters.Add(&nonce&, new Random().Next().ToString());
// 2.生成签名信息
String signature = Utils.genSignature(secretKey, parameters);
parameters.Add(&signature&, signature);
// 3.发送HTTP请求
HttpClient client = Utils.makeHttpClient();
String result = Utils.doPost(client, apiUrl, parameters, 10000);
if(result != null)
JObject ret = JObject.Parse(result);
int code = ret.GetValue(&code&).ToObject&Int32&();
String msg = ret.GetValue(&msg&).ToObject&String&();
if (code == 200)
JArray array = (JArray)ret.SelectToken(&result&);
if (array==null || !array.HasValues)
Console.WriteLine(&暂时没有文本人工复审结果需要获取,请稍后重试!&);
foreach (var item in array)
JObject tmp = (JObject)
int action = tmp.GetValue(&action&).ToObject&Int32&();
String taskId = tmp[&taskId&].ToObject&String&();
String callback = tmp.GetValue(&callback&).ToObject&String&();
JArray labelArray = (JArray)tmp.SelectToken(&labels&);
if (action == 0)
Console.WriteLine(String.Format(&taskId={0},callback={1},文本人工复审结果:通过&, taskId,callback));
else if (action == 2)
Console.WriteLine(String.Format(&taskId={0},callback={1},文本人工复审结果:不通过,分类信息如下:{2}&, taskId,callback,labelArray));
Console.WriteLine(String.Format(&ERROR: code={0}, msg={1}&, code, msg));
Console.WriteLine(&Request failed!&);
var utils=require(&./utils&);
//产品密钥ID,产品标识
var secretId=&your_secret_id&;
// 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
var secretKey=&your_secret_key&;
// 业务ID,易盾根据产品业务特点分配
var businessId=&your_business_id&;
// 易盾反垃圾云服务文本检测结果获取接口地址
var apiurl=&https://as.dun.163yun.com/v3/text/callback/results&;
//请求参数
var post_data = {
// 1.设置公有有参数
secretId:secretId,
businessId:businessId,
version:&v3.1&,
timestamp:new Date().getTime(),
nonce:utils.noncer()
var signature=utils.genSignature(secretKey,post_data);
post_data.signature=
//http请求结果
var responseCallback=function(responseData){
var data = JSON.parse(responseData);
var code=data.
var msg=data.
if(code==200){
var result=data.
if(result.length==0){
console.log(&暂时没有人工复审结果需要获取,请稍后重试!&);
for(var i=0;i&result.i++){
var obj=result[i];
var action=obj.
var taskId=obj.taskId;
var callback=obj.
var labels=obj.
if(action==0){// 内容确认没问题,通过
console.log(&taskId=&+taskId+&,callback=&+callback+&,文本人工复审结果:通过&)
}else if(action==2){// 内容非法,不通过,需删除
console.log(&taskId=&+taskId+&,callback=&+callback+&,文本人工复审结果:不通过,分类信息如下:&+JSON.stringify(labels))
console.log('ERROR:code=' + code+',msg='+msg);
utils.sendHttpRequest(apiurl,&POST&,post_data,responseCallback);
当获取到离线结果时,输出示例如下:
注:分类信息,100:色情,200:广告,300:暴恐,400:违禁,500:涉政,600:谩骂,700:灌水
&code&: 200,
&msg&: &ok&,
&result&: [
&action&: 2,
&taskId&: &ae483dcda250&,
&callback&: &ebfcad1c-dba1-490c-b4de-e784c2691768&,
&labels&: [
&label&: 600,
&level&: 2
&details&: {
&action&: 0,
&taskId&: &e483dcdas11&,
&callback&: &asdffcad1c-dba1-490c-b4de-e784c269112&,
&labels&: []
当无最新离线结果需要获取时,输出示例如下:
&code&: 200,
&msg&: &ok&,
&result&:[]
图片接口调用流程
易盾图片反垃圾服务对外提供在线实时检测和离线检测结果获取两类接口。
在线实时检测接口是图片反垃圾服务实时反垃圾引擎检测接口,该接口实时返回检测结果,产品可以根据该结果对数据进行初步过滤。
离线检测结果获取接口返回图片反垃圾服务离线反垃圾引擎检测结果及部分人工质检结果,产品可根据该结果做进一步数据过滤。
以下是易盾图片反垃圾服务接口调用示意图:
图片在线检测
该接口同步返回易盾反垃圾云服务实时反垃圾引擎检测结果,产品根据图片分类结果,做图片初步过滤。由于网络环境及图片本身大小的影响(建议产品对图片进行压缩后,再过反垃圾检测),部分图片可能出现下载超时情况,该部分数据会转到离线检测模块进行机器离线处理,直到得出结果。机器离线检测后,可能会有部分不确定的数据需要人工进一步确认。离线检测结果及人工确认结果需产品自行定期调用获取。
检测接口支持的图片格式如下: jpg、jpeg、png、bmp、gif、riff、webp、tif、tiff
公共参数已省略,详细见
String(json数组)
32张或10MB
images为json数组,支持批量检测
用户唯一标识,如果无需登录则为空
用户 IP 地址
接口版本v3.1
images参数结构说明
图片名称(或图片标识), 该字段为回调字段,产品可以根据业务情况自行设计,如json结构、或者为图片url均可
类型,分别为1:图片URL,2:图片BASE64值
32张或者10MB
图片内容,如type=1,则该值为图片URL,如type=2,则该值为图片BASE64值。图片URL检测单次请求最多支持32张,图片BASE64值检测单次请求大小限制为最多10MB
响应字段如下,响应通用字段已省略,详细见
result 数组数据结构
图片名称(或图片标识)
本次请求数据标识,可以根据该标识查询数据最新结果
图片检测状态码,定义为:0:检测成功,610:图片下载失败,620:图片格式错误,630:其它
labels 数据结构
分类信息,100:色情,110:性感,200:广告,210:二维码,300:暴恐,400:违禁,500:涉政
分类级别,0:正常,1:不确定,2:确定
details 数据结构
图片ocr文本
/** 产品密钥ID,产品标识 */
private final static String SECRETID = &your_secret_id&;
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
private final static String SECRETKEY = &your_secret_key&;
/** 业务ID,易盾根据产品业务特点分配 */
private final static String BUSINESSID = &your_business_id&;
/** 易盾反垃圾云服务图片在线检测接口地址 */
private final static String API_URL = &https://as.dun.163yun.com/v3/image/check&;
/** 实例化HttpClient,发送http请求使用,可根据需要自行调参 */
private static HttpClient httpClient = HttpClient4Utils.createHttpClient(100, 20, 1, 2000);
* @param args
* @throws Exception
public static void main(String[] args) throws Exception {
Map&String, String& params = new HashMap&String, String&();
// 1.设置公共参数
params.put(&secretId&, SECRETID);
params.put(&businessId&, BUSINESSID);
params.put(&version&, &v3.2&);
params.put(&timestamp&, String.valueOf(System.currentTimeMillis()));
params.put(&nonce&, String.valueOf(new Random().nextInt()));
// 2.设置私有参数
JsonArray jsonArray = new JsonArray();
// 传图片url进行检测,name结构产品自行设计,用于唯一定位该图片数据
JsonObject image1 = new JsonObject();
image1.addProperty(&name&, &http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/2751.jpg&);
image1.addProperty(&type&, 1);
image1.addProperty(&data&, &http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/2751.jpg&);
jsonArray.add(image1);
// 传图片base64编码进行检测,name结构产品自行设计,用于唯一定位该图片数据
JsonObject image2 = new JsonObject();
image2.addProperty(&name&, &{\&imageId\&: , \&contentId\&: 78978}&);
image2.addProperty(&type&, 2);
image2.addProperty(&data&,
&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&);
jsonArray.add(image2);
params.put(&images&, jsonArray.toString());
params.put(&account&, &&);
params.put(&ip&, &123.115.77.137&);
// 3.生成签名信息
String signature = SignatureUtils.genSignature(SECRETKEY, params);
params.put(&signature&, signature);
// 4.发送HTTP请求,这里使用的是HttpClient工具包,产品可自行选择自己熟悉的工具包发送请求
String response = HttpClient4Utils.sendPost(httpClient, API_URL, params, Consts.UTF_8);
// 5.解析接口返回值
JsonObject resultObject = new JsonParser().parse(response).getAsJsonObject();
int code = resultObject.get(&code&).getAsInt();
String msg = resultObject.get(&msg&).getAsString();
if (code == 200) {
JsonArray resultArray = resultObject.getAsJsonArray(&result&);
for (JsonElement jsonElement : resultArray) {
JsonObject jObject = jsonElement.getAsJsonObject();
String name = jObject.get(&name&).getAsString();
String taskId = jObject.get(&taskId&).getAsString();
int status = jObject.get(&status&).getAsInt();
JsonArray labelArray = jObject.get(&labels&).getAsJsonArray();
System.out.println(String.format(&taskId=%s,status=%s,name=%s,labels:&, taskId, status, name));
int maxLevel = -1;
// 产品需根据自身需求,自行解析处理,本示例只是简单判断分类级别
for (JsonElement labelElement : labelArray) {
JsonObject lObject = labelElement.getAsJsonObject();
int label = lObject.get(&label&).getAsInt();
int level = lObject.get(&level&).getAsInt();
double rate = lObject.get(&rate&).getAsDouble();
System.out.println(String.format(&label:%s, level=%s, rate=%s&, label, level, rate));
maxLevel = level & maxLevel ? level : maxL
switch (maxLevel) {
System.out.println(&#图片机器检测结果:最高等级为\&正常\&\n&);
System.out.println(&#图片机器检测结果:最高等级为\&嫌疑\&\n&);
System.out.println(&#图片机器检测结果:最高等级为\&确定\&\n&);
System.out.println(String.format(&ERROR: code=%s, msg=%s&, code, msg));
#!/usr/bin/env python
# -*- coding: utf-8 -*-
&&&易盾图片在线检测接口python示例代码
接口文档: http://dun.163.com/api.html
python版本:python2.7
1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值
2. $ python image_check_api_demo.py
__author__ = 'yidun-dev'
__date__ = ''
__version__ = '0.1-dev'
import hashlib
import time
import random
import urllib
import urllib2
import json
class ImageCheckAPIDemo(object):
&&&图片在线检测接口示例代码&&&
API_URL = &https://as.dun.163yun.com/v3/image/check&
VERSION = &v3.2&
def __init__(self, secret_id, secret_key, business_id):
secret_id (str) 产品密钥ID,产品标识
secret_key (str) 产品私有密钥,服务端生成签名信息使用
business_id (str) 业务ID,易盾根据产品业务特点分配
self.secret_id = secret_id
self.secret_key = secret_key
self.business_id = business_id
def gen_signature(self, params=None):
&&&生成签名信息
params (object) 请求参数
参数签名md5值
for k in sorted(params.keys()):
buff += str(k)+ str(params[k])
buff += self.secret_key
return hashlib.md5(buff).hexdigest()
def check(self, params):
&&&请求易盾接口
params (object) 请求参数
请求结果,json格式
params[&secretId&] = self.secret_id
params[&businessId&] = self.business_id
params[&version&] = self.VERSION
params[&timestamp&] = int(time.time() * 1000)
params[&nonce&] = int(random.random()*)
params[&signature&] = self.gen_signature(params)
# print json.dumps(params)
params = urllib.urlencode(params)
request = urllib2.Request(self.API_URL, params)
content = urllib2.urlopen(request, timeout=10).read()
# print content
# content = &{\&code\&:200,\&msg\&:\&ok\&,\&timestamp\&:5,\&nonce\&:1524585,\&signature\&:\&630afd9e389e6d6522330\&,\&result\&:[{\&image\&:\&http://img1.cache.netease.com/xxx1.jpg\&,\&labels\&:[]},{\&image\&:\&http://img1.cache.netease.com/xxx2.jpg\&,\&labels\&:[{\&label\&:100,\&level\&:2,\&rate\&:0.99},{\&label\&:200,\&level\&:1,\&rate\&:0.5}]},{\&image\&:\&http://img1.cache.netease.com/xxx3.jpg\&,\&labels\&:[{\&label\&:200,\&level\&:1,\&rate\&:0.5}]}]}&;
return json.loads(content)
except Exception, ex:
print &调用API接口失败:&, str(ex)
if __name__ == &__main__&:
&&&示例代码入口&&&
SECRET_ID = &your_secret_id& # 产品密钥ID,产品标识
SECRET_KEY = &your_secret_key& # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露
BUSINESS_ID = &your_business_id& # 业务ID,易盾根据产品业务特点分配
image_check_api = ImageCheckAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID)
images = []
imageurl = {
&name&:&http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/2751.jpg&,
&data&:&http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/2751.jpg&
imagebase64 = {
&name&:&{\&imageId\&: , \&contentId\&: 78978}&,
&data&:&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&
images.append(imageurl)
images.append(imagebase64)
# print json.dumps(images)
params = {
&images&: json.dumps(images),
&account&: &&,
&ip&: &123.115.77.137&
ret = image_check_api.check(params)
if ret[&code&] == 200:
results = ret[&result&]
for result in results:
print &taskId=%s,status=%s,name=%s,labels:& %(result[&taskId&],result[&status&],result[&name&])
maxLevel = -1
for labelObj in result[&labels&]:
label = labelObj[&label&]
level = labelObj[&level&]
= labelObj[&rate&]
print &label:%s, level=%s, rate=%s& %(label, level, rate)
maxLevel =level if level & maxLevel else maxLevel
if maxLevel==0:
print &#图片机器检测结果:最高等级为\&正常\&\n&
elif maxLevel==1:
print &#图片机器检测结果:最高等级为\&嫌疑\&\n&
elif maxLevel==2:
print &#图片机器检测结果:最高等级为\&确定\&\n&
print &ERROR: ret.code=%s, ret.msg=%s& % (ret[&code&], ret[&msg&])
/** 产品密钥ID,产品标识 */
define(&SECRETID&, &your_secret_id&);
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
define(&SECRETKEY&, &your_secret_key&);
/** 业务ID,易盾根据产品业务特点分配 */
define(&BUSINESSID&, &your_business_id&);
/** 易盾反垃圾云服务图片在线检测接口地址 */
define(&API_URL&, &https://as.dun.163yun.com/v3/image/check&);
/** api version */
define(&VERSION&, &v3.2&);
/** API timeout*/
define(&API_TIMEOUT&, 10);
/** php内部使用的字符串编码 */
define(&INTERNAL_STRING_CHARSET&, &auto&);
* 计算参数签名
* $params 请求参数
* $secretKey secretKey
function gen_signature($secretKey, $params){
ksort($params);
foreach($params as $key=&$value){
if($value !== null) {
$buff .= $secretK
return md5($buff);
* 将输入数据的编码统一转换成utf8
* @params 输入的参数
function toUtf8($params){
$utf8s = array();
foreach ($params as $key =& $value) {
$utf8s[$key] = is_string($value) ? mb_convert_encoding($value, &utf8&, INTERNAL_STRING_CHARSET) : $
return $utf8s;
* 反垃圾请求接口简单封装
* $params 请求参数
function check($params){
$params[&secretId&] = SECRETID;
$params[&businessId&] = BUSINESSID;
$params[&version&] = VERSION;
$params[&timestamp&] = sprintf(&%d&, round(microtime(true)*1000));// time in milliseconds
$params[&nonce&] = sprintf(&%d&, rand()); // random int
$params = toUtf8($params);
$params[&signature&] = gen_signature(SECRETKEY, $params);
// var_dump($params);
$options = array(
&http& =& array(
=& &Content-type: application/x-www-form-urlencoded\r\n&,
=& &POST&,
&timeout& =& API_TIMEOUT, // read timeout in seconds
&content& =& http_build_query($params),
= stream_context_create($options);
$result = file_get_contents(API_URL, false, $context);
// var_dump($result);
if($result === FALSE){
return array(&code&=&500, &msg&=&&file_get_contents failed.&);
return json_decode($result, true);
// 简单测试
function main(){
echo &mb_internal_encoding=&.mb_internal_encoding().&\n&;
$images = array();
array_push($images, array(// type=1表示传图片url检查
&name& =& &http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/2751.jpg&,
&type& =& 1,
&data& =& &http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/2751.jpg&,
array_push($images, array( // type=2表示传图片base64编码进行检查
&name& =& &{\&imageId\&: , \&contentId\&: 78978}&,
&type& =& 2,
&data& =& &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

我要回帖

更多关于 html个人信息展示页面 的文章

 

随机推荐