作者:Ai防红技术团队 | 更新:2026年08月17日
2026年08月17日 谷歌域名防红+QQ微信防红+防反诈屏蔽+APK爆毒 怎么把四维检测API集成进自己的程序?Python封装可复用检测客户端实操教程
手动打开四五个网页逐个测域名,效率低、容易漏、还拿不到结构化数据。本文手把手教你用 Python 把谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒 四个维度的检测 API 集成进自己的程序,封装成一个可复用的检测客户端类,包含限流、超时、重试和并发处理——一次写完,永久复用 ,你的监控脚本、告警系统、管理后台都能直接调用。
谷歌域名防红 QQ微信防红 防反诈屏蔽 APK爆毒 检测API Python集成 检测客户端 限流重试 并发检测
📋 一分钟速览:四维检测 API 集成 → 可复用检测客户端的完整路径
本文核心是一套「逐维打通 → 统一封装 → 容错加固 → 接入闭环 」的 API 集成流水线:① 逐个打通谷歌 Safe Browsing / QQ微信 urlsec / 反诈 DNS / Virustotal 四个检测 API,搞清参数和返回解析 → ② 用一个 Python DetectClient 类把四维调用统一封装,detect_all() 一行拿到四维结果 → ③ 给客户端加超时、指数退避重试、并发,让它能扛生产环境 → ④ 接入告警和结果入库,形成全自动检测闭环。核心结论:把检测做成一个可复用客户端,比每次临时拼命令省 10 倍以上时间,而且结果是结构化 JSON,直接进数据库和告警 。
⏱ 工具:Python requests + json + concurrent.futures | 覆盖四维:谷歌 Safe Browsing / QQ微信 urlsec / 反诈 DNS / APK 文件哈希 | 零成本
为什么要把四维检测结果直接集成进自己的程序,而不是每次手动打开网页逐个测?
很多站长检测域名被红,靠的是「收藏夹里存四五个网址,每次手动打开、输入域名、看结果、截图」。这种方法在只测一两个域名、偶尔测一次 时勉强能用,一旦域名多了、频率上来了,问题就暴露:手动测十个域名,光打开网页、等加载、复制结果就要半小时,还容易把「这次测的」和「上次测的」搞混。
把检测 API 集成进程序之后,差别是量级的 :一条命令、一个函数调用,就能拿到四个维度的结构化 JSON 结果 ,可以直接写进数据库、触发告警、生成报告。下面这张图对比了「手动网页检测」和「API 集成检测」的完整流程差异:
手动网页检测 vs API 集成检测:流程对比
手动网页检测
① 打开谷歌透明度报告 → 输入域名
② 打开 QQ微信 urlsec → 输入域名
③ 打开反诈 DNS → 逐个换运营商查
④ 打开 Virustotal → 查 APK 文件
⑤ 手动抄结果 / 截图 → 存相册
10 个域名 ≈ 30 分钟 · 结果不可结构化
API 集成检测
① 调 detect_all(domain) 一个函数
② 四维 API 并发/串行自动跑完
③ 返回统一 JSON 结果
④ 自动入库 + 状态变化告警
⑤ 全程无人值守
10 个域名 ≈ 3 秒 · 结果结构化 JSON
结论:API 集成 = 快 600 倍 + 结果可直接进数据库、告警、报告
一次封装,永久复用;域名越多,收益越大
▲ 手动网页检测 vs API 集成检测:流程、耗时、结果可复用性三个维度全面对比
换句话说:手动检测的瓶颈不在「会不会测」,而在「每次都要重新人工重复」 。API 集成把重复劳动一次性解决,剩下的就是纯粹的数据搬运。下面这张表把两者在四个维度上的差距量化说清楚:
对比维度
手动网页检测
API 集成检测
10 个域名耗时
约 30 分钟
约 3 秒(并发)
结果形态
截图 / 肉眼判断
结构化 JSON,可入库
能否自动告警
❌ 靠人盯
✅ 状态一变即推送
能否接入监控后台
❌ 不行
✅ 直接写数据库 / API
谷歌、QQ微信、反诈、APK四维检测API分别怎么调用和解析返回结果?
集成第一步,是把四个维度的检测 API 逐个打通,搞清「接口地址、认证方式、关键参数、返回判定」 四个要素。四个维度的数据源分别是:谷歌用 Safe Browsing API、QQ微信用腾讯 urlsec、反诈用运营商 DNS 解析、APK 用 Virustotal 文件哈希。下面这张表先给你一个总览:
检测维度
数据源 / 接口
认证方式
返回判定
谷歌域名防红
Safe Browsing API v4
API Key(免费 1 万次/天)
返回空 = 安全;返回 matches = 命中
QQ微信防红
cgi.urlsec.qq.com
无需认证
result 字段 0/1 判断拦截
防反诈屏蔽
运营商 DNS(114/阿里/百度)
无需认证
解析结果是否为拦截页 IP
APK爆毒
Virustotal API v3
x-apikey(免费账号)
引擎检出数 > 0 = 有毒
下面用四张 step-card 逐个打通,每张都给你能直接跑的代码。
1
谷歌 Safe Browsing:POST 查询,返回空 = 安全
Safe Browsing v4 用 POST 提交域名,返回体里如果没有 matches 字段,就代表「未命中」,即谷歌没有标记这个域名。有 matches 就是被谷歌防红。
# 谷歌 Safe Browsing 域名检测(返回空 = 安全)
import requests
GSB_KEY = "YOUR_GSB_KEY" # Google Cloud Console 免费申请
def check_google_sb(domain):
url = "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=" + GSB_KEY
body = {
"threatInfo" : {
"threatTypes" : ["MALWARE" , "SOCIAL_ENGINEERING" , "UNWANTED_SOFTWARE" ],
"platformTypes" : ["ANY_PLATFORM" ],
"threatEntryTypes" : ["URL" ],
"threatEntries" : [{"url" : "http://" + domain}],
}
}
r = requests.post(url, json=body, timeout=10)
return "被红" if r.json().get("matches" ) else "安全"
💡 Safe Browsing 的 API Key 在 Google Cloud Console 开启「Safe Browsing API」后免费获取,每天 1 万次额度,个人检测绰绰有余。
2
QQ微信 urlsec:GET 查询,看 result 字段
腾讯 urlsec 是 QQ、微信内打开链接时的安全检查接口,无需认证,直接 GET 就能拿到 JSON。关键看返回里的 result 字段:非 0 通常代表被拦截 (不同场景取值略有差异,建议同时关注 eviltype 等辅助字段)。
# QQ微信 urlsec 域名检测(result 非 0 = 被拦截)
def check_qq_wechat(domain):
url = "https://cgi.urlsec.qq.com/index.php"
params = {"m" : "url" , "a" : "valid" , "url" : "http://" + domain}
r = requests.get(url, params=params, timeout=10)
data = r.json()
result = data.get("data" , {}).get("result" , data.get("result" , 0))
return "被拦截" if result else "安全"
💡 urlsec 无需 key、无需注册,是最容易接入的一维。但它的返回字段在不同版本偶有变化,接入时建议把整个 JSON 原文一并保存,方便日后回溯。
3
防反诈屏蔽:DNS 解析,被劫持会返回拦截页 IP
防反诈屏蔽的核心机制是运营商 DNS 劫持——被标记的域名解析结果会被指向一个反诈拦截页的 IP,而不是真实服务器 IP。检测方法就是用多个运营商 DNS 解析域名,对比解析结果是否异常。
# 防反诈屏蔽检测:用多运营商 DNS 解析,比对结果
import subprocess
DNS_SERVERS = {"移动" : "114.114.114.114" , "阿里" : "223.5.5.5" , "百度" : "180.76.76.76" }
BLOCK_PAGE_IPS = {"127.0.0.1" , "0.0.0.0" } # 常见拦截页/黑洞 IP,按需补充
def check_antifraud(domain):
for name, dns in DNS_SERVERS.items():
out = subprocess.run(["dig" , "+short" , "@" + dns, domain], capture_output=True , text=True ).stdout.strip()
if not out or any(ip in out for ip in BLOCK_PAGE_IPS):
return "被屏蔽(" + name + ")"
return "正常解析"
💡 反诈屏蔽有地域差异——同一域名在移动网络被屏蔽、在电信网络正常很常见。所以一定要多运营商交叉解析,单个 DNS 结果不能下结论。
4
APK爆毒:Virustotal 文件哈希 / 域名报告
APK 爆毒这一维,检测的是「你的 APK 文件有没有被安全引擎报毒」。用 Virustotal API v3,先算 APK 文件的 SHA-256,再提交查询,看有多少引擎检出。
# APK 爆毒检测:算文件哈希 → Virustotal 查检出数
import hashlib
VT_KEY = "YOUR_VT_KEY" # Virustotal 账号免费获取
def check_apk(apk_path):
sha = hashlib.sha256(open(apk_path, "rb" ).read()).hexdigest()
url = "https://www.virustotal.com/api/v3/files/" + sha
r = requests.get(url, headers={"x-apikey" : VT_KEY}, timeout=15)
stats = r.json()["data" ]["attributes" ]["last_analysis_stats" ]
return stats # {malicious: N, suspicious: N, ...}
💡 APK 爆毒和域名是「连坐」关系:APK 被大量引擎报毒,往往连带下载它的域名一起被标记。所以 APK 和域名两维要一起测。
⚠️ 最容易踩的一个坑:只测一个维度就下「安全」结论
四个维度的检测是独立 的——谷歌没红不代表 QQ 微信没拦,QQ 微信没拦不代表反诈没屏蔽,域名正常不代表 APK 没爆毒。正确做法永远是四维一起测、一起看 ,任何一维命中都要当回事。下一节封装的 detect_all() 就是为了逼你一次看全四维。
怎么用Python封装一个可复用的四维检测客户端类?
四个维度各自打通之后,如果每次还要手动拼四个函数、分别处理结果,那只是把「打开网页」换成了「跑四段代码」,还不够省事。正确做法是把四维调用统一封装成一个 DetectClient 类 ,对外只暴露一个 detect_all(domain) 方法,一行代码返回四维结果。
下面是这个客户端类的设计结构,先看整体再动手写:
DetectClient 类结构:四维方法 + 统一出口
detect_all(domain) —— 唯一对外入口
一行调用,返回四维统一 JSON
check_google_sb
谷歌域名防红
check_qq_wechat
QQ微信防红
check_antifraud
防反诈屏蔽
check_apk
APK爆毒
_retry() 重试 / _timeout 超时 / 并发调度
统一的容错层,四个方法共用
四维方法各司其职,统一容错层兜底,detect_all 一键汇总
▲ DetectClient 类结构:四维检测方法 + 统一容错层 + detect_all 单一出口
下面是完整的客户端类代码,把前面四个维度的函数收进来,加上统一的结果格式和超时:
1
写 DetectClient 类,detect_all 一键返回四维结果
# detect_client.py —— 可复用的四维检测客户端
import requests, subprocess, hashlib, datetime
class DetectClient:
def __init__(self, gsb_key, vt_key, timeout=10):
self.gsb_key = gsb_key
self.vt_key = vt_key
self.timeout = timeout
# ---- 四维检测方法(前面已逐个实现,这里收进来) ----
def check_google_sb(self, domain): ...
def check_qq_wechat(self, domain): ...
def check_antifraud(self, domain): ...
def check_apk(self, apk_path): ...
# ---- 统一入口:一行拿到四维结构化结果 ----
def detect_all(self, domain, apk_path=None ):
result = {
"domain" : domain,
"timestamp" : datetime.datetime.now().isoformat(),
"dimensions" : {
"谷歌域名防红" : self.check_google_sb(domain),
"QQ微信防红" : self.check_qq_wechat(domain),
"防反诈屏蔽" : self.check_antifraud(domain),
"APK爆毒" : self.check_apk(apk_path) if apk_path else "未提供APK" ,
}
}
return result
# 用法:
client = DetectClient(gsb_key="YOUR_GSB_KEY" , vt_key="YOUR_VT_KEY" )
result = client.detect_all("example.com" , apk_path="app.apk" )
print(result)
💡 返回结果统一用 dimensions 字典包四维,后续入库、告警、生成报告都直接读这个字典,格式固定、好扩展。
2
把结果落成 JSON,方便后续任意程序读取
检测客户端返回的是 Python 字典,落成 JSON 文件后,任何语言、任何脚本都能读取。这一步让「检测」和「使用检测结果」彻底解耦。
# 把四维结果落成 result.json
import json
json.dump(result, open("result.json" , "w" , encoding="utf-8" ),
ensure_ascii=False , indent=2)
print("result.json 已生成" )
💡 一旦有 JSON,后面的告警脚本、SQLite 入库、PDF 报告生成都能复用同一份数据——「一次检测,处处使用」。
检测API的限流、超时、重试和并发怎么处理,才能稳定跑在生产环境?
把客户端写出来只算「能用」,要让它「在生产环境稳定跑 」,还得解决四个现实问题:免费 API 有配额限流、网络会抖动超时、偶发失败要重试、多个域名要并发。缺了这四样,你的客户端在测试时好好的,一上量就各种崩。下面这张表先把四个问题和对应策略列清楚:
问题
症状
应对策略
建议参数
限流 (Rate Limit)
HTTP 429 报错
请求间加间隔 + 尊重 Retry-After
单维 ≥ 200ms 间隔
超时 (Timeout)
请求一直挂起
每个请求设 timeout
10~15 秒
偶发失败
网络抖动 / 5xx
指数退避重试
最多 3 次,退避 1/2/4 秒
批量域名
串行太慢
线程池并发
并发数 4~8
下面三步把「限流、超时、重试、并发」逐个落地。核心是给客户端加一个统一的 _retry() 装饰器 ,让四个维度的方法都自动获得重试和超时能力,而不是每个方法里各写一遍。
1
给所有请求加超时 + 指数退避重试
用一个 _retry 装饰器包住请求逻辑:失败或超时就按 1 秒、2 秒、4 秒退避重试,最多 3 次。四个维度的方法都不用改,套上装饰器就自动获得重试能力。
# 统一的指数退避重试装饰器
import time, functools
def retry(times=3, base=1.0):
def deco(fn):
@functools.wraps(fn)
def wrapper(*a, **kw):
for i in range(times):
try :
return fn(*a, **kw)
except Exception as e:
if i == times - 1:
return "检测失败:" + str(e)
time.sleep(base * (2 ** i)) # 1s → 2s → 4s
return wrapper
return deco
# 用法:给四个检测方法套上装饰器
@retry(times=3)
def check_google_sb(self, domain):
... # 内部请求必须带 timeout=10
💡 退避重试的关键是「只重试幂等请求」——四维检测都是只读查询,重试安全;换成有副作用的写操作就不能这么套。
2
处理限流:请求间加间隔 + 尊重 Retry-After
免费 API 都有配额,尤其 Virustotal 免费版每分钟只有 4 次请求。遇到 429 时,应该读取响应头里的 Retry-After 字段,按它指定的秒数等待,而不是盲目重试。
# 限流友好:遇到 429 尊重 Retry-After 头
def _get(url, **kw):
r = requests.get(url, timeout=10, **kw)
if r.status_code == 429:
wait = int(r.headers.get("Retry-After" , 5))
time.sleep(wait)
r = requests.get(url, timeout=10, **kw)
return r
💡 Virustotal 免费版限流严格(4 次/分钟),批量检测 APK 时一定要加间隔,否则连续 429 会被临时封 key。
3
用线程池并发检测批量域名
检测 50 个域名,串行要几十秒甚至几分钟(APK 维最慢)。用 ThreadPoolExecutor 并发,把总耗时压到和单个域名差不多。注意并发数别开太高,否则撞限流。
# 线程池并发检测批量域名
from concurrent.futures import ThreadPoolExecutor
domains = ["a.com" , "b.com" , "c.com" , ...] # 你的域名列表
with ThreadPoolExecutor(max_workers=4) as pool:
results = list(pool.map(client.detect_all, domains))
for r in results:
print(r["domain" ], r["dimensions" ])
💡 并发数建议 4~8:太小没提速,太大撞限流。APK 维受 Virustotal 配额限制,可单独降并发、加间隔。
❌ 常见误区:「检测脚本一次跑通就能上生产,不用管限流和重试」
很多人在本地测通一次就以为万事大吉。真实生产环境里,限流 429、网络超时、5xx 偶发错误是常态而非例外 ——尤其免费 API 配额低,批量一跑就触发。不做重试和限流处理,脚本上量第一天就可能大面积报错,漏掉关键的被红告警。正确做法是:从第一版就把超时、退避重试、限流间隔一起做进去 ,后面才省心。
集成完成后怎么接告警和结果入库,形成全自动检测闭环?
客户端写好了、容错也加固了,最后一步是把「检测」接进你的业务闭环:结果入库 → 状态变化告警 → 定时运行 。这样你的域名安全就从「想起来才测一次」变成「全天候自动盯防」。下面三步落地:
1
四维结果写入 SQLite,形成可追溯历史
把每次 detect_all 的结果写进 SQLite 表,就能积累检测历史,日后要查「哪天开始被红」直接 SQL 一查就有。
# 四维结果写入 SQLite
import sqlite3
conn = sqlite3.connect("detect.db" )
conn.execute("""CREATE TABLE IF NOT EXISTS results(
domain TEXT, ts TEXT, gsb TEXT, qq TEXT, fz TEXT, apk TEXT)""" )
conn.execute("INSERT INTO results VALUES (?,?,?,?,?,?)" , (
result["domain" ], result["timestamp" ],
result["dimensions" ]["谷歌域名防红" ],
result["dimensions" ]["QQ微信防红" ],
result["dimensions" ]["防反诈屏蔽" ],
result["dimensions" ]["APK爆毒" ],
))
conn.commit()
💡 历史库是「告警」和「趋势分析」的基础——只有先有历史,才能比对出「状态变了」。
2
状态一变就推送告警(Telegram / 企业微信)
每次检测完,和上一次的结果比对,四维任何一维从「安全」变成「被红」,立刻推送告警。这样被红的第一时间你就知道,而不是等用户来投诉。
# 状态变化告警:从安全→被红 时推送
if result["dimensions" ]["谷歌域名防红" ] != last["dimensions" ]["谷歌域名防红" ]:
requests.get("https://api.telegram.org/botYOUR_TOKEN/sendMessage" ,
params={"chat_id" : "YOUR_CHAT" ,
"text" : "⚠️ 域名状态变化: " + result["domain" ]})
💡 告警文案里带上域名、变化的维度、前后状态、时间戳,方便收到后直接定位问题。
3
挂到 crontab,定时自动运行
把整个客户端 + 入库 + 告警串成一个脚本,交给 crontab 定时跑。参考四大平台数据库刷新时间(谷歌约 2 小时、反诈约 4 小时、QQ微信约 6 小时),建议每天固定几个时间点运行。
# crontab -e 添加:每天 9:00 / 15:00 / 21:00 自动跑检测闭环
0 9 * * * cd /root/detect && python3 run.py >> /var/log/detect.log 2>&1
0 15 * * * cd /root/detect && python3 run.py >> /var/log/detect.log 2>&1
0 21 * * * cd /root/detect && python3 run.py >> /var/log/detect.log 2>&1
💡 到这里,你就拥有了一套「自动检测 + 历史入库 + 状态告警」的完整域名安全监控闭环,全部基于免费 API 和自建脚本。
✅ 推荐落地顺序(一次搭好,长期受益)
第 1 步 :逐个打通四维检测 API → 第 2 步 :封装 DetectClient 类,detect_all 一行出结果 → 第 3 步 :加超时、退避重试、限流、并发 → 第 4 步 :结果入库 + 状态变化告警 + crontab 定时。 整套零成本、纯开源工具,一次写完之后每天自动运行,你只需要在被红告警响起来的时候去处理。
客户怎么说?
"我们的棋牌APP之前每天被封,接入Ai防红后连续运营90天零封禁。"
——某东南亚游戏运营商,月付1500U套餐
"谷歌防红提交后24小时解除Safe Browsing警告,比自己申诉快10倍。"
——某海外贸易平台,使用谷歌防红500U/月
"以前几十个域名要专人每天手动打开网页测,累还总漏。后来把四维检测API封装成客户端挂到crontab,状态一变自动告警,人工全省了。"
——某批量域名运营者,用API集成方案替代人工检测后人力成本下降80%
不想自己写代码集成?怎么用333Check免费拿到四维检测结果?
本文教你用免费 API 自己把四维检测集成进程序——完全可以零成本自建。 如果你希望跳过写代码,直接拿到覆盖谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒四维的结构化检测结果 ,联系 @AICDN 免费测试。 我们帮你跑第一次全维度检测并出具结果,3 分钟出报告。
🔍 提交域名 · 免费获取四维检测结果