Нужна помощь по интеграции вызова JSON API в программу Python.
Я хочу интегрировать следующий API в программу Python .py, чтобы он мог вызываться и печатать ответ.
В руководстве по API указано, что токен-носитель должен быть сгенерирован, чтобы разрешить вызовы API, что я успешно сделал. Однако я не уверен в синтаксисе включения этого токена в качестве аутентификации токена-носителя в запрос Python API.
Я могу успешно выполнить вышеуказанный запрос, используя cURL с включенным токеном. Я пробовал маршруты urllib и requests, но безрезультатно.
Полная информация об API: Документация по API IBM X-Force Exchange - 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
Код ниже: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()
какие-нибудь идеи?json
это диктовка в вашей версии, а не функцияrequests.post(...).json
... не называйте это{u'error': u'Not authorized. Access is only allowed via https://exchange.xforce.ibmcloud.com/#/'}
Это то же самое, как если бы я нажимал URL-адрес непосредственно в браузере. Мне что-то не хватает с токеном или способом настройки конечной точки? Код: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()
Если вы используете
requests
модуль, альтернативным вариантом является создание класса аутентификации, как описано в разделе « Новые формы аутентификации »: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
а затем вы можете отправлять такие запросы
response = requests.get('https://www.example.com/', auth=BearerAuth('3pVzwec1Gs1m'))
который позволяет использовать тот же
auth
аргумент, что и базовую аутентификацию, и может помочь вам в определенных ситуациях.источник
Токен должен быть помещен в заголовок авторизации в следующем формате:
Авторизация: предъявитель [Token_Value]
Код ниже:
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
источник
req = urllib.request.Request(urlstr, None, {"Authorization": "Bearer %s" % enc_authstr}) response = urllib.request.urlopen(req)