使用Google Safebrowsing API检测多URL返回空响应求助
解决Google Safebrowsing API返回空响应的问题
我来帮你排查这个问题,从你给出的代码和描述来看,主要有几个关键点需要修正,咱们一步步来:
1. 先修复代码里的语法错误
你提供的payload存在明显的语法不完整问题:
"MALWARE..."缺少闭合的双引号threatTypes数组没有闭合- 整个payload的大括号也没写完
这种语法错误会导致JSON序列化失败,或者发送给API的请求内容不合法,大概率会引发错误,甚至出现异常的空响应。
2. 补充API要求的必填参数
Google Safebrowsing v4 API的threatInfo字段里有几个必填项,你当前的payload里缺失了,这也是导致异常响应的原因:
platformTypes:指定要检测的平台类型,比如["ANY_PLATFORM"]threatEntryTypes:指定要检测的条目类型,这里是URL,所以填["URL"]threatEntries:你要检测的URL列表,必须明确传进去
3. 正确传递API密钥
Safebrowsing v4要求把API密钥作为查询参数附加到请求URL中,而不是放在请求体或头里。
修正后的完整代码
import requests import json api_key = '123456' # 将API密钥作为查询参数加入请求URL url = f"https://safebrowsing.googleapis.com/v4/threatMatches:find?key={api_key}" # 完整且符合API要求的payload payload = { 'client': { 'clientId': "mycompany", 'clientVersion': "0.1" }, 'threatInfo': { 'threatTypes': ["SOCIAL_ENGINEERING", "MALWARE"], 'platformTypes': ["ANY_PLATFORM"], # 必填字段 'threatEntryTypes': ["URL"], # 必填字段 'threatEntries': [ # 替换成你要检测的实际URL列表 {'url': "https://example.com"}, {'url': "https://test-malicious-url.com"} ] } } # 设置正确的请求头,确保API能解析JSON格式的请求体 headers = {'Content-Type': 'application/json'} try: # 发送POST请求,将payload序列化为JSON字符串 response = requests.post(url, data=json.dumps(payload), headers=headers) # 检查请求是否成功(比如HTTP状态码为200) response.raise_for_status() result = response.json() if not result: print("✅ 未检测到威胁,API返回空结果(这是正常情况)") else: print("⚠️ 检测到威胁信息:", result) except requests.exceptions.RequestException as e: print("❌ 请求出错:", str(e))
额外说明
- 如果API返回空的JSON对象
{},这是正常现象,说明你检测的URL没有被Google标记为恶意/钓鱼链接 - 如果遇到403错误,先检查你的API密钥是否有效,以及是否在Google Cloud控制台中启用了Safebrowsing API
- 由于你使用的是Python 3.5.2,f-string是支持的;如果有兼容性问题,可以改用字符串拼接:
url = "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=" + api_key
内容的提问来源于stack exchange,提问作者user9745009
相关产品推荐
相关产品推荐

