Google 安全浏览 API v4 和 Python 请求的意外响应
Unexpected response with Google Safe Browsing API v4 and Python requests
我正在尝试实现一个小功能来验证可能的网络钓鱼 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)
如果我做
print (json.dumps(payload, indent=4)
一切看起来没问题。然而,我从 Google 那里得到的回复并不同意。
{'error': {'message': 'Invalid JSON payload received. Unknown name
"threat_entries:" at \'threat_info\': Cannot find field.', 'status':
'INVALID_ARGUMENT', 'code': 400, 'details': [{'@type':
'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations':
[{'field': 'threat_info', 'description': 'Invalid JSON payload
received. Unknown name "threat_entries:" at \'threat_info\': Cannot
find field.'}]}]}} {'X-Frame-Options': 'SAMEORIGIN',
'Transfer-Encoding': 'chunked', 'Cache-Control': 'private', 'Date':
'Tue, 25 Oct 2016 07:55:30 GMT', 'Content-Type': 'application/json;
charset=UTF-8', 'Alt-Svc': 'quic=":443"; ma=2592000;
v="36,35,34,33,32"', 'X-Content-Type-Options': 'nosniff',
'Content-Encoding': 'gzip', 'X-XSS-Protection': '1; mode=block',
'Server': 'ESF'} application/json; charset=UTF-8
我不能 - 像往常一样 - 发现我的错误。其他人可以发现它并可能让我走上正确的轨道吗?
去掉threatEntries
后面不需要的冒号
它应该工作得很好。
此外,如果您使用的是 requests
版本 2.4.2 或更新版本,则无需在代码中插入 content-type
header,而是可以将密钥移至 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())
我正在尝试实现一个小功能来验证可能的网络钓鱼 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)
如果我做
print (json.dumps(payload, indent=4)
一切看起来没问题。然而,我从 Google 那里得到的回复并不同意。
{'error': {'message': 'Invalid JSON payload received. Unknown name "threat_entries:" at \'threat_info\': Cannot find field.', 'status': 'INVALID_ARGUMENT', 'code': 400, 'details': [{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'threat_info', 'description': 'Invalid JSON payload received. Unknown name "threat_entries:" at \'threat_info\': Cannot find field.'}]}]}} {'X-Frame-Options': 'SAMEORIGIN', 'Transfer-Encoding': 'chunked', 'Cache-Control': 'private', 'Date': 'Tue, 25 Oct 2016 07:55:30 GMT', 'Content-Type': 'application/json; charset=UTF-8', 'Alt-Svc': 'quic=":443"; ma=2592000; v="36,35,34,33,32"', 'X-Content-Type-Options': 'nosniff', 'Content-Encoding': 'gzip', 'X-XSS-Protection': '1; mode=block', 'Server': 'ESF'} application/json; charset=UTF-8
我不能 - 像往常一样 - 发现我的错误。其他人可以发现它并可能让我走上正确的轨道吗?
去掉threatEntries
后面不需要的冒号
它应该工作得很好。
此外,如果您使用的是 requests
版本 2.4.2 或更新版本,则无需在代码中插入 content-type
header,而是可以将密钥移至 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())