Buscando ayuda para integrar una llamada a la API JSON en un programa Python.
Estoy buscando integrar la siguiente API en un programa Python .py para permitir que se llame y se imprima la respuesta.
La guía de la API establece que se debe generar un token de portador para permitir llamadas a la API, lo cual he hecho con éxito. Sin embargo, no estoy seguro de la sintaxis para incluir este token como autenticación de token de portador en la solicitud de la API de Python.
Puedo completar con éxito la solicitud anterior usando cURL con un token incluido. He intentado rutas "urllib" y "solicitudes" pero sin resultado.
Detalles completos de la API: Documentación de la API de IBM X-Force Exchange - Reputación de 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 callableCódigo siguiente: ¿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()Alguna idea?jsones un dictado en su versión y no una funciónrequests.post(...).json... no la llame{u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'}Esto es lo mismo que si presiono la URL directamente en un navegador. ¿Me falta algo con el token o la forma en que se configura el punto final? Código: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 está utilizando el
requestsmódulo, una opción alternativa es escribir una clase de autenticación, como se explica en " Nuevas formas de autenticación ":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 ry luego puedes enviar solicitudes como esta
response = requests.get('https://www.example.com/', auth=BearerAuth('3pVzwec1Gs1m'))que le permite usar el mismo
authargumento como autenticación básica y puede ayudarlo en ciertas situaciones.fuente
El token debe colocarse en un encabezado de autorización de acuerdo con el siguiente formato:
Autorización: Portador [Token_Value]
Código a continuación:
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_objfuente
req = urllib.request.Request(urlstr, None, {"Authorization": "Bearer %s" % enc_authstr}) response = urllib.request.urlopen(req)