Vous recherchez de l'aide pour intégrer un appel d'API JSON dans un programme Python.
Je cherche à intégrer l'API suivante dans un programme Python .py pour lui permettre d'être appelé et la réponse à imprimer.
Les directives de l'API indiquent qu'un jeton de support doit être généré pour autoriser les appels à l'API, ce que j'ai fait avec succès. Cependant, je ne suis pas sûr de la syntaxe pour inclure ce jeton en tant qu'authentification de jeton de support dans la demande d'API Python.
Je peux compléter avec succès la demande ci-dessus en utilisant cURL avec un jeton inclus. J'ai essayé les routes "urllib" et "demandes" mais en vain.
Détails complets de l'API: Documentation de l'API IBM X-Force Exchange - Réputation IP
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 ci-dessous: desimport 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()
idées?json
est un dict dans votre version et non une fonctionrequests.post(...).json
... ne l'appelez pas{u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'}
C'est la même chose que si je frappe l'URL directement dans un navigateur. Est-ce que je manque quelque chose avec le jeton ou la façon dont le point de terminaison est configuré? 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()
Si vous utilisez le
requests
module, une autre option consiste à écrire une classe d'authentification, comme indiqué dans " Nouveaux formulaires d'authentification ":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
puis pouvez-vous envoyer des demandes comme celle-ci
response = requests.get('https://www.example.com/', auth=BearerAuth('3pVzwec1Gs1m'))
qui vous permet d'utiliser le même
auth
argument tout comme l'authentification de base, et peut vous aider dans certaines situations.la source
Le jeton doit être placé dans un en-tête d'autorisation selon le format suivant:
Autorisation: porteur [Token_Value]
Code ci-dessous:
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
la source
req = urllib.request.Request(urlstr, None, {"Authorization": "Bearer %s" % enc_authstr}) response = urllib.request.urlopen(req)