Выполнение вызова 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, что и базовая аутентификация, и может помочь вам в определенных ситуациях.