Szukasz pomocy w integracji wywołania JSON API z programem w języku Python.
Chcę zintegrować następujący interfejs API w programie Python .py, aby umożliwić jego wywołanie i wydrukowanie odpowiedzi.
Wskazówki dotyczące interfejsu API stanowią, że należy wygenerować token okaziciela, aby umożliwić wywołania interfejsu API, co zostało pomyślnie wykonane. Jednak nie jestem pewien składni dołączania tego tokenu jako uwierzytelniania tokenu okaziciela w żądaniu interfejsu API języka Python.
Mogę pomyślnie zrealizować powyższe żądanie za pomocą cURL z dołączonym tokenem. Próbowałem tras "urllib" i "żądań", ale bezskutecznie.
Pełne szczegóły interfejsu API: Dokumentacja interfejsu API IBM X-Force Exchange - reputacja 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
Kod poniżej: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()
jakieś pomysły?json
to dykt w twojej wersji, a nie funkcjarequests.post(...).json
... nie nazywaj tego{u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'}
To jest to samo, co gdybym trafił na adres URL bezpośrednio w przeglądarce. Czy brakuje mi czegoś z tokenem lub sposobem skonfigurowania punktu końcowego? Kod: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()
Jeśli korzystasz z
requests
modułu, alternatywną opcją jest napisanie klasy uwierzytelniania, zgodnie z opisem w „ Nowe formularze uwierzytelniania ”: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
a potem możesz wysyłać takie żądania
response = requests.get('https://www.example.com/', auth=BearerAuth('3pVzwec1Gs1m'))
co pozwala ci użyć tego samego
auth
argumentu, tak jak basic auth i może ci pomóc w pewnych sytuacjach.źródło
Token należy umieścić w nagłówku Authorization zgodnie z następującym formatem:
Autoryzacja: okaziciel [Token_Value]
Kod poniżej:
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
źródło
req = urllib.request.Request(urlstr, None, {"Authorization": "Bearer %s" % enc_authstr}) response = urllib.request.urlopen(req)