如何自動判斷域名是否被微信攔截
時間:2023-02-12 16:09:01 | 來源:建站知識
時間:2023-02-12 16:09:01 來源:建站知識
背景
由于業(yè)務需要,需穩(wěn)定可靠的微信域名攔截查詢接口,但在網(wǎng)上谷歌百度查了好幾天,都是一些付費接口,各大博客論壇
GitHub也幾乎是廣告,后來摸索了一段時間也成功實現(xiàn),現(xiàn)決定將代碼和原理分享出來!
原理
使用 Wireshark 抓包獲取微信的域名攔截查詢接口。
域名有如下幾種狀態(tài):
A. 域名能正常訪問(未被微信攔截)
B. 域名被微信攔截
C. 非微信官方網(wǎng)頁,繼續(xù)訪問將轉換成手機預覽模式(在公眾號后臺把域名添加到業(yè)務域名一般能解決這個問題)
D. 據(jù)用戶投訴及騰訊安全網(wǎng)址安全中心檢測,該網(wǎng)頁包含惡意欺詐內(nèi)容,為維護綠色上網(wǎng)環(huán)境,已停止訪問
E. 網(wǎng)頁包含誘導分享、關注等誘導行為內(nèi)容,被多人投訴,為維護綠色上網(wǎng)環(huán)境,已停止訪問
代碼是我參考河馬檢測、矮鹿防封 貓頭鷹微信域名檢測工具等幾家老牌檢測工具抓出來的,如果只需要平時隔三差五檢測
檢測,這幾家都是免費的,也夠用了,因為這邊需要做高頻接口,所以才需要取得原理.
源碼
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)的狀態(tài)為:%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()