从 curl 到工程封装:综合风控评分 API 集成实战
适用场景与问题背景在准备、登录、下单、领券等核心业务环节黑产团伙常利用虚拟运营商号段、代理IP、临时邮箱进行批量养号或薅羊毛。传统做法是人工维护黑名单或自建规则引擎但维护维护复杂度高、响应慢。综合风控评分 API 提供三个维度的信号手机号、IP、邮箱返回 0~100 风险分以及明确的决策建议放行pass、二次验证challenge、拦截reject让业务方无需自建复杂模型即可快速接入反欺诈能力。接口能力边界单次调用可同时检测三项mobile手机号/物联网卡号、ipIPv4/IPv6、email邮箱。各项为可选参数可按需传入。支持多场景通过scene参数区分register、login、order、couponAPI 内部会自适应阈值权重。结果包含信号层明细不仅给出总分还给出每条数据源的具体风险标签如MOBILE_MVNO、IP_DATACENTER、EMAIL_DISPOSABLE及权重方便业务侧二次加工。QPS 限制2 次/秒适合在线实时决策。超出限制会返回 429。鉴权与请求参数Header 鉴权接口使用Authorization头部传递 API Key从控制台获取格式为Bearer your_api_key或使用X-API-Keycurl 示例中使用的就是后者。实际生产中建议统一使用Authorization: Bearer key更规范。请求体JSON字段类型必填说明mobilestring否11 位手机号或 13 位物联网卡号。传此字段会检查是否属于虚拟运营商/物联网卡号段ipstring否IPv4/IPv6 地址。传self可自动获取调用者出口 IPemailstring否邮箱地址。检测是否为临时邮箱、MX 记录是否异常scenestring否业务场景默认register。取值register/login/order/coupon至少应传一个检测维度否则接口会返回参数校验错误。curl 可复现实例假设已设置环境变量API_KEY以下命令检测一个高风险场景虚拟运营商号段 机房IP 临时邮箱curl -sS -X POST \ -H X-API-Key: $API_KEY \ -H Content-Type: application/json \ -d { mobile: 17012345678, ip: 47.88.1.1, email: abcguerrillamail.com, scene: register } \ https://v1.apizero.cn/api/risk-score响应示例已格式化{ code: 0, msg: 成功, request_id: k9x2p4mabc12, data: { risk_score: 88, risk_level: critical, decision: reject, scene: register, checked: { mobile: true, ip: true, email: true }, signals: { mobile: { checked: true, input_mask: 170****5678, valid: true, number_type: mvno, carrier: 虚拟运营商, risk: high }, ip: { checked: true, ip: 47.88.x.x, valid: true, isp: 阿里云, is_datacenter: true, is_proxy: false, is_private: false, risk: medium, province: }, email: { checked: true, email: abcguerrillamail.com, valid_format: true, has_mx: true, is_disposable: true, is_trusted: false, risk: high } }, hit_rules: [ {code: MOBILE_MVNO, desc: 虚拟运营商号段170实名宽松薅羊毛高发, weight: 35}, {code: EMAIL_DISPOSABLE, desc: 一次性/临时邮箱域名典型用于注册套利, weight: 35}, {code: IP_DATACENTER, desc: 机房/IDC IP非真实用户网络脚本批量常用, weight: 30} ] } }返回字段深度解读字段路径类型含义codeint业务状态码0 表示成功msgstring对应文字信息request_idstring唯一请求标识可用于问题排查data.risk_scoreint综合风险分 0-100越高越危险data.risk_levelstring等级safe/low/medium/high/criticaldata.decisionstring业务决策pass/challenge/rejectdata.hit_rules[]array命中规则列表每条含code、desc、weight权重 1-100总和 100data.signalsobject各信号的详细检测结果见下方子表signals 子字段说明mobile字段类型含义checkedbool是否检测了手机号input_maskstring脱敏手机号中间四位隐藏validbool号码格式是否有效number_typestringnormal/mvno/iotcarrierstring运营商名称riskstringlow/medium/highip字段类型含义checkedbool是否检测 IPipstring脱敏后的 IP部分隐藏validboolIP 格式是否有效ispstring所属运营商/云厂商is_datacenterbool是否为机房 IPis_proxybool是否为代理/VPN IPis_privatebool是否为内网 IPriskstring风险等级email字段类型含义checkedbool是否检测邮箱emailstring完整邮箱原样返回valid_formatbool格式是否合法has_mxbool是否有 MX 记录is_disposablebool是否为临时/一次性邮箱is_trustedbool是否属于可信域名库riskstring风险等级常见错误处理HTTP状态码业务codemsg原因处理方式4011001认证失败API Key 无效或未传检查 Header 中的 Authorization/X-API-Key4002001参数校验失败请求体 JSON 格式错误或未传任何检测字段确保至少填一个字段且 JSON 合法4002002场景值不在允许范围内scene 字段值非法仅传register/login/order/coupon4293001请求频率过高超过 2 QPS 限制限流降级等待后重试5004001服务内部错误服务端异常重试若持续则联系技术支持注意所有错误响应也包含code和msg以及request_id便于日志追踪。工程化封装注意事项1. 网络层超时与重试API 要求在 500ms 以内通常几十 ms但网络波动可能引起超时。建议设置连接超时 3s、读超时 5s。对于 429 和 5xx 错误实施指数退避重试最多 3 次间隔 1s/2s/4s。2. 限流保护单实例 QPS 上限为 2多实例部署时要确保总请求不超过限制。可使用令牌桶或信号量控制本地频率或借助网关集中限流。3. 缓存策略同一手机号/IP/邮箱的短时间重复查询如 1 分钟内可以缓存上次结果但注意风险会随时间变化缓存不宜过长。对于 blacklist 级别的拦截可以缓存 15-30 分钟。4. 降级预案当 API 不可用如超时或 5xx时建议采取保守策略对风险较高的场景准备默认拦截 人工审核对低风险场景如登录可放行。5. 工程代码示例Pythonimport requests import time import logging logger logging.getLogger(__name__) class RiskScoreClient: def __init__(self, api_key: str, base_url: str https://v1.apizero.cn/api/risk-score): self.headers { Authorization: fBearer {api_key}, Content-Type: application/json } self.url base_url self.max_retries 3 self.retry_delays [1, 2, 4] def query(self, mobile: str None, ip: str None, email: str None, scene: str register) - dict: payload {k: v for k, v in [(mobile, mobile), (ip, ip), (email, email), (scene, scene)] if v is not None} for attempt in range(self.max_retries): try: resp requests.post(self.url, jsonpayload, headersself.headers, timeout(3, 5)) if resp.status_code 429: logger.warning(Rate limited, retrying after %ss, self.retry_delays[attempt]) time.sleep(self.retry_delays[attempt]) continue resp.raise_for_status() data resp.json() if data.get(code) ! 0: logger.error(API error: %s, data.get(msg)) return data except requests.exceptions.Timeout: logger.warning(Timeout on attempt %d, attempt1) if attempt self.max_retries - 1: time.sleep(self.retry_delays[attempt]) else: raise except requests.exceptions.RequestException as e: logger.error(Request failed: %s, e) if attempt self.max_retries - 1: time.sleep(self.retry_delays[attempt]) else: raise # 降级返回默认拒绝决策 return { code: -1, msg: service unavailable, data: {decision: reject, risk_score: 100} }6. Java 代码片段使用 HttpClientimport java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.time.Duration; public class RiskScoreClient { private static final String URL https://v1.apizero.cn/api/risk-score; private final String apiKey; private final HttpClient client; public RiskScoreClient(String apiKey) { this.apiKey apiKey; this.client HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(3)) .build(); } public String query(String mobile, String ip, String email, String scene) throws Exception { // 构建 JSON 请求体使用 Jackson 等库序列化 String body String.format( {\mobile\:\%s\,\ip\:\%s\,\email\:\%s\,\scene\:\%s\}, mobile ! null ? mobile : , ip ! null ? ip : , email ! null ? email : , scene ! null ? scene : register); HttpRequest request HttpRequest.newBuilder() .uri(URI.create(URL)) .header(Authorization, Bearer apiKey) .header(Content-Type, application/json) .POST(HttpRequest.BodyPublishers.ofString(body)) .timeout(Duration.ofSeconds(5)) .build(); HttpResponseString response client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); } }总结综合风控评分 API 通过一次调用即可整合三大风险信号配合工程化封装重试、限流、降级能稳定支撑在线业务。建议在接入前先使用 curl 验证 Key 和参数再逐步替换为客户端 SDK 或自行封装的工具类。参考文档原始文档https://apizero.cn/aidocs/risk-score/raw.md接口文档页https://apizero.cn/aidocs/risk-score

相关新闻

从 curl 到工程封装:文本相似度 API 集成指南

从 curl 到工程封装:文本相似度 API 集成指南

适用场景与背景 文本相似度比对是 NLP 中的基础能力,广泛应用于以下场景: 评论/内容审核:检测用户提交的评论是否与已有重复或高度近似AI 生成内容检测:将 AI 生成文本与原文比对,辅助判断抄袭或生成痕迹多语言翻译质…

2026/10/7 16:30:49 阅读更多 →
短视频学习效率怎么提高,2026付费课值不值得 真实经验给出答案

短视频学习效率怎么提高,2026付费课值不值得 真实经验给出答案

先说明白核心判断 短视频学习效率低的核心原因,是手动整理课程笔记的时间达到听课时间的3-5倍,要提高效率,核心是用匹配场景的AI语音转写纪要工具压缩无效整理时间。2026年的付费短视频课值不值得买,取决于你有没有配套工具消化内…

2026/10/7 13:17:35 阅读更多 →
下一个风口就是AIAgent,真的很缺人

下一个风口就是AIAgent,真的很缺人

家人们!最近有没有发现,AI Agent 的风向真的彻底变了!去招聘市场转一圈,就能明显感受到这股前所未有的就业热浪。和一年前相比,简直是天壤之别! 对于想转型或刚入门的同学来说,这绝对是比很多饱…

2026/10/11 18:14:03 阅读更多 →

最新新闻

Trae实测:从对话生成到Agent执行,AI编程工具如何改变开发流程

Trae实测:从对话生成到Agent执行,AI编程工具如何改变开发流程

最近AI Coding已经热到不需要再解释背景了。从最早的代码补全,到能直接对话生成整段功能,再到现在的Agent式“你提需求、它动手改代码”,这一波工具迭代的速度,确实让很多开发者的日常工作方式都变了。我陆陆续续试过不少同类产品…

2026/10/13 2:35:32 阅读更多 →
Maven settings.xml 配置详解:镜像、私服与 profile 实战

Maven settings.xml 配置详解:镜像、私服与 profile 实战

简介:一份面向Java开发者的Maven全局配置速查与理解资源,定位于帮助解决依赖下载缓慢、仓库路径混乱、多环境构建不一致等常见问题,适合刚接触Maven或需要系统梳理settings.xml的开发者。资源为单个xml配置文件,压缩包仅2KB&#…

2026/10/13 2:35:32 阅读更多 →
.NET Core接口加密实战:RSA+AES-GCM混合加密方案

.NET Core接口加密实战:RSA+AES-GCM混合加密方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 2:35:32 阅读更多 →
从 Lodash 迁移到 Remeda:sample 随机采样的等价替换与原生实现

从 Lodash 迁移到 Remeda:sample 随机采样的等价替换与原生实现

开发工具 【免费下载链接】remeda A utility library for JavaScript and TypeScript. 项目地址: https://gitcode.com/gh_mirrors/re/remeda 点击查看 免费下载 本文以 Remeda 官方迁移映射文档 packages/docs/src/content/mapping/lodash/sample.md 为核心骨架&a…

2026/10/13 2:35:32 阅读更多 →
SpringBoot集成Smart-Socket实现云快充TCP长连接实战

SpringBoot集成Smart-Socket实现云快充TCP长连接实战

简介:本资源是一套基于SpringBoot与Smart-Socket实现云快充协议的充电桩对接源代码,面向Java后端开发者及智慧能源平台建设者,解决城市级充电平台中与硬件设备(充电桩)高效、标准化通信的技术难点。项目聚焦底层Socket…

2026/10/13 2:35:32 阅读更多 →
SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0学生信息管理系统实战

SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0学生信息管理系统实战

接手过一个学生信息管理系统的小项目,技术栈正好是SpringBoot2 Vue3 MyBatis-Plus MySQL8.0,标题里这套组合一眼看去很常见,但真正从零落地的时候,细节远比想象中多。当初团队里有人建议用老掉牙的JSP那套,也有人建…

2026/10/13 2:34:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →