Выполнение вызова API в Python с API, для которого требуется токен-носитель
Нужна помощь в интеграции вызова JSON API в программу Python.
Я собираюсь интегрировать следующий API в программу Python.py, чтобы он мог вызываться и печататься ответ.
В руководстве по API указано, что токен на предъявителя должен быть сгенерирован, чтобы разрешить вызовы API, что я и сделал успешно. Однако я не уверен в синтаксисе включения этого токена в качестве аутентификации токена носителя в запросе API Python.
Я могу успешно выполнить вышеуказанный запрос, используя cURL с включенным токеном. Я пробовал маршруты "urllib" и "запросы", но безрезультатно.
Полная информация об API: Документация по API IBM X-Force Exchange - Репутация IP
Ответы
Ответ 1
Это просто означает, что он ожидает, что в качестве ключа в данных вашего заголовка
import requests
endpoint = ".../api/ip"
data = {"ip": "1.1.2.3"}
headers = {"Authorization": "Bearer MYREALLYLONGTOKENIGOT"}
print(requests.post(endpoint, data=data, headers=headers).json())
Ответ 2
Маркер должен быть помещен в заголовок авторизации в соответствии со следующим форматом:
Авторизация: Носитель [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
Ответ 3
Если вы используете модуль requests
, альтернативным вариантом является написание класса аутентификации, как описано в "Новые формы аутентификации":
import requests
class BearerAuth(requests.auth.AuthBase):
token = None
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
, что и базовая аутентификация, и может помочь вам в определенных ситуациях.