Неожиданный ответ с запросами Google Safe Browsing API v4 и Python

Я пытаюсь реализовать небольшую функцию для проверки возможных фишинговых URL-адресов и подумал, что использование Google Safe Browsing 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)

If I do a

print (json.dumps (полезная нагрузка, отступ = 4)

все это выглядит нормально. Однако ответ, который я получил от Google, не согласен.

{'error': {'message': 'Получены недопустимые данные JSON. Неизвестное имя "угрозы_стали:" в \ 'угроза_инфо \': поле не найдено. ',' Статус ':' INVALID_ARGUMENT ',' код ': 400,' детали ': [{' @type ':' type.googleapis.com /google.rpc.BadRequest ',' fieldViolations ': [{' field ':' dangerous_info ',' description ':' Получены недопустимые данные JSON. Неизвестное имя "Threat_entries:" at \ 'Threat_info \': Поле не найдено. '}]}]}} {' 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; режим = блок ',' Сервер ':' ESF '} application / json; charset = UTF-8

Я не могу - как обычно - заметить свою ошибку. Может ли кто-нибудь другой заметить это и, возможно, направить меня на правильный путь?


person Swedish Mike    schedule 25.10.2016    source источник


Ответы (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())
person Jerz Now    schedule 06.11.2016