2016-10-25 93 views
0

我試圖實施一個小功能來驗證可能的釣魚網址,並認爲使用Google安全瀏覽API是一個好的開始。Google安全瀏覽API v4和Python請求的意外響應

閱讀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(有效載荷,縮進= 4)

這一切看起來 ok了。但是,我從谷歌後面的答覆不同意。

{'error':{'message':'收到無效的JSON有效負載。未知名稱 「threat_entries:」at \'threat_info \':無法找到字段。','status': 'INVALID_ARGUMENT','code':400,'details':[{'@type': 'type。 googleapis.com/google.rpc.BadRequest','fieldViolations': [{'field':'threat_info','description':'收到無效的JSON有效負載 。 '''']]}}} {'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; '內容編碼':'gzip','X-XSS-Protection':'X-XSS-Protection' 1; mode = block', 'Server':'ESF'} application/json; charset = UTF-8

我不能像往常一樣發現我的錯誤。其他人可以發現它,並可能把我放在正確的軌道上嗎?

回答

1

只要刪除不必要的冒號threatEntries 它應該工作得很好。

此外,如果你使用的是2.4.2或更高版本,你不需要插入content-type頭代碼requests版本,而不是您可以將您的鍵移到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())