Suchen Sie nach Hilfe bei der Integration eines JSON-API-Aufrufs in ein Python-Programm.
Ich möchte die folgende API in ein Python .py-Programm integrieren, damit sie aufgerufen und die Antwort gedruckt werden kann.
Die API-Anleitung besagt, dass ein Inhaber-Token generiert werden muss, um Aufrufe der API zu ermöglichen, was ich erfolgreich durchgeführt habe. Ich bin mir jedoch nicht sicher, wie dieses Token als Token-Token-Authentifizierung in die Python-API-Anforderung aufgenommen werden soll.
Ich kann die obige Anfrage mit cURL mit einem enthaltenen Token erfolgreich abschließen. Ich habe "urllib" - und "request" -Routen ausprobiert, aber ohne Erfolg.
Vollständige API-Details: IBM X-Force Exchange-API-Dokumentation - IP-Reputation
Traceback (most recent call last): File "bearerreturn.py", line 6, in <module> print requests.post(endpoint,data=data,headers=headers).json() TypeError: 'dict' object is not callable
Code unten:import requests endpoint = "https://xforce-api.mybluemix.net:443/api/ip" data = {"ip":"1.1.2.3"} headers = {"Bearer token":"TOKEN WAS INSERTED HERE"} print requests.post(endpoint,data=data,headers=headers).json()
Irgendwelche Ideen?json
ist ein Diktat in Ihrer Version und keine Funktionrequests.post(...).json
... nennen Sie es nicht{u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'}
Dies ist das gleiche, als würde ich die URL direkt in einem Browser drücken . Vermisse ich etwas mit Token oder wie der Endpunkt konfiguriert ist? Code:import requests endpoint = "https://xforce-api.mybluemix.net:443/ipr/" data = {"ip":"1.1.2.3"} headers = {"Bearer token":"TOKEN_HERE"} print requests.post(endpoint,data=data,headers=headers).json()
Wenn Sie ein
requests
Modul verwenden, können Sie alternativ eine Authentifizierungsklasse schreiben, wie unter " Neue Authentifizierungsformen " beschrieben:import requests class BearerAuth(requests.auth.AuthBase): def __init__(self, token): self.token = token def __call__(self, r): r.headers["authorization"] = "Bearer " + self.token return r
und dann können Sie Anfragen wie diese senden
response = requests.get('https://www.example.com/', auth=BearerAuth('3pVzwec1Gs1m'))
Dies ermöglicht es Ihnen, dasselbe
auth
Argument wie bei der Basisauthentifizierung zu verwenden und kann Ihnen in bestimmten Situationen helfen.quelle
Das Token muss in einem Autorisierungsheader in folgendem Format abgelegt werden:
Autorisierung: Inhaber [Token_Value]
Code unten:
import urllib2 import json def get_auth_token() ''' get an auth token ''' req=urllib2.Request("https://xforce-api.mybluemix.net/auth/anonymousToken") response=urllib2.urlopen(req) html=response.read() json_obj=json.loads(html) token_string=json_obj["token"].encode("ascii","ignore") return token_string def get_response_json_object(url, auth_token) ''' returns json object with info ''' auth_token=get_auth_token() req=urllib2.Request(url, None, {"Authorization": "Bearer %s" %auth_token}) response=urllib2.urlopen(req) html=response.read() json_obj=json.loads(html) return json_obj
quelle
req = urllib.request.Request(urlstr, None, {"Authorization": "Bearer %s" % enc_authstr}) response = urllib.request.urlopen(req)