【问题标题】:Unexpected response with Google Safe Browsing API v4 and Python requestsGoogle 安全浏览 API v4 和 Python 请求的意外响应
【发布时间】:2026-02-10 07:05:01
【问题描述】:

我正在尝试实现一个小功能来验证可能的网络钓鱼 URL,并认为使用 Google 安全浏览 API 将是一个好的开始。

阅读 API 文档后,我认为自己掌握了一些东西,并拼凑了以下代码:

import requests
import json

url = "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=<REDACTED>"
headers = {'content-type': 'application/json'}

payload = {'client': {'clientId': "mycompany", 'clientVersion': "0.1"},
        'threatInfo': {'threatTypes': ["SOCIAL_ENGINEERING", "MALWARE"],
                       'platformTypes': ["ANY_PLATFORM"],
                       'threatEntryTypes': ["URL"],
                       'threatEntries:': [{'url': "http://www.urltocheck1.org"}]}}

print (json.dumps(payload, indent=4))

r = requests.post(url, headers=headers, json=payload)

如果我做一个

打印 (json.dumps(payload, indent=4)

一切都看起来没问题。但是,我从 Google 收到的回复不同意。

{'error': {'message': '收到无效的 JSON 有效负载。未知名称 "threat_entries:" at \'threat_info\': 找不到字段。', 'status': 'INVALID_ARGUMENT','代码':400,'详细信息':[{'@type': 'type.googleapis.com/google.rpc.BadRequest'、'fieldViolations': [{'field': 'threat_info', 'description': '无效的 JSON 负载 已收到。 \'threat_info\' 中的未知名称“threat_entries:”:不能 查找字段。'}]}]}} {'X-Frame-Options': 'SAMEORIGIN', “传输编码”:“分块”,“缓存控制”:“私有”,“日期”: '2016 年 10 月 25 日星期二 07:55:30 GMT','Content-Type':'application/json; charset=UTF-8', 'Alt-Svc': 'quic=":443";马=2592000; v="36,35,34,33,32"', 'X-Content-Type-Options': 'nosniff', '内容编码':'gzip','X-XSS-保护':'1;模式=块', “服务器”:“ESF”} 应用程序/json; charset=UTF-8

我无法 - 像往常一样 - 发现我的错误。其他人可以发现它并可能让我走上正确的轨道吗?

【问题讨论】:

    标签: python json python-requests safe-browsing


    【解决方案1】:

    只需删除threatEntries 之后不必要的冒号即可 它应该可以正常工作。

    此外,如果您使用的是 requests 2.4.2 或更高版本,则无需在代码中插入 content-type 标头,而是可以将密钥移动到 params 部分:

    import requests
    import json
    
    api_key='your_key'
    url = "https://safebrowsing.googleapis.com/v4/threatMatches:find"
    payload = {'client': {'clientId': "mycompany", 'clientVersion': "0.1"},
            'threatInfo': {'threatTypes': ["SOCIAL_ENGINEERING", "MALWARE"],
                           'platformTypes': ["ANY_PLATFORM"],
                           'threatEntryTypes': ["URL"],
                           'threatEntries': [{'url': "http://www.urltocheck1.org"}]}}
    params = {'key': api_key}
    r = requests.post(url, params=params, json=payload)
    # Print response
    print(r) 
    print(r.json())
    

    【讨论】:

      最近更新 更多