如何自动判断域名是否被微信拦截
时间:2023-02-12 16:09:01 | 来源:建站知识
时间:2023-02-12 16:09:01 来源:建站知识
背景
由于业务需要,需稳定可靠的微信域名拦截查询接口,但在网上谷歌百度查了好几天,都是一些付费接口,各大博客论坛
GitHub也几乎是广告,后来摸索了一段时间也成功实现,现决定将代码和原理分享出来!
原理
使用 Wireshark 抓包获取微信的域名拦截查询接口。
域名有如下几种状态:
A. 域名能正常访问(未被微信拦截)
B. 域名被微信拦截
C. 非微信官方网页,继续访问将转换成手机预览模式(在公众号后台把域名添加到业务域名一般能解决这个问题)
D. 据用户投诉及腾讯安全网址安全中心检测,该网页包含恶意欺诈内容,为维护绿色上网环境,已停止访问
E. 网页包含诱导分享、关注等诱导行为内容,被多人投诉,为维护绿色上网环境,已停止访问
代码是我参考河马检测、矮鹿防封 猫头鹰微信域名检测工具等几家老牌检测工具抓出来的,如果只需要平时隔三差五检测
检测,这几家都是免费的,也够用了,因为这边需要做高频接口,所以才需要取得原理.
源码
Demo
// 您的 API Token,在用户中心可查询到
$apiToken = "********************************";
// 需要检测的地址或域名
$reqUrl = "
http://www.qq.com";
$url = sprintf("
https://api.hemajiance.cn_url=%s", $apiToken, $reqUrl);//请求接口,以河马检测为例
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$responseBody = curl_exec($ch);
$responseArr = json_decode($responseBody, true);
if (json_last_error() != JSON_ERROR_NONE) {
echo "JSON 解析接口结果出错 ";
return;
}
if (isset($responseArr['code']) && $responseArr['code'] == 0) {
// 接口正确返回
// $responseArr['data']['status'] 的取值范围:ok、blocked
// ok 表示正常、blocked 表示被封
printf("测试地址(%s)的状态为:%s ", $reqUrl, $responseArr['data']['status']);
} else {
printf("接口异常:%s ", var_export($responseArr, true));
}
# -*- coding: utf-8 -*-
import json, urllib
from urllib import urlencode
def main():
# 您的 API Token,在用户中心可查询到
apiToken = "*********************"
url = "
https://www.hemajiance.cn"
params = {
"req_url" : "
http://www.qq.com", #需要检测的地址或域名
"api_token" : apiToken,
}
params = urlencode(params)
f = urllib.urlopen("%s?%s" % (url, params))
content = f.read()
res = json.loads(content)
if res:
code = res["code"]
if code == 0:
#成功请求
print res["result"]
else:
print "%s: %s" % (res["code"],res["msg"])
else:
print "request api error"
if __name__ == '__main__':
main()