Python запрашивает библиотеку, как передать заголовок авторизации с помощью одного токена

у меня есть URI запроса и маркер. Если я использую:

curl -s "<MY_URI>" -H "Authorization: TOK:<MY_TOKEN>"

etc., Я получаю 200 и просматриваю соответствующие данные JSON. Итак, я установил запросы, и когда я пытаюсь получить доступ к этому ресурсу, я получаю 403, вероятно, потому, что я не знаю правильного синтаксиса для передачи этого токена. Кто-нибудь может помочь мне разобраться? Вот что у меня есть:--4-->

import sys,socket
import requests

r = requests.get('<MY_URI>','<MY_TOKEN>')
r. status_code

Я уже пробовал:

r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))
r = requests.get('<MY_URI>',auth=('TOK','<MY_TOKEN>'))
r = requests.get('<MY_URI>',headers=('Authorization: TOK:<MY_TOKEN>'))

но ничего из этого не работает.

5 ответов


в python:

('<MY_TOKEN>')

эквивалентно

'<MY_TOKEN>'

и просит интерпретирует

('TOK', '<MY_TOKEN>')

поскольку вы хотите, чтобы запросы использовали базовую аутентификацию и создавали заголовок авторизации, например:

'VE9LOjxNWV9UT0tFTj4K'

который является представлением base64 'TOK:<MY_TOKEN>'

чтобы передать свой собственный заголовок, вы проходите в словаре так:

r = requests.get('<MY_URI>', headers={'Authorization': 'TOK:<MY_TOKEN>'})

Я искал что-то похожее и наткнулся этой. Похоже, что в первом варианте вы упомянули

r = requests.get('<MY_URI>',auth=('<MY_TOKEN>'))

"auth" принимает два параметра: имя пользователя и пароль, поэтому фактическая инструкция должна быть

r=requests.get('<MY_URI>',auth=('<YOUR_USERNAME>','<YOUR_PASSWORD>')

в моем случае не было пароля, поэтому я оставил второй параметр в поле auth пустым, как показано ниже:

r=requests.get('<MY_URI',auth=('MY_USERNAME',''))

надеюсь, это кому-то поможет:)


вы также можете установить заголовки для всего сеанса:

TOKEN = 'abcd0123'
HEADERS = {'Authorization': 'token {}'.format(TOKEN)}

with requests.Session() as s:

    s.headers.update(HEADERS)
    resp = s.get('http://example.com/')

это сработало для меня: access_token = #yourAccessTokenHere#

result = requests.post(url, headers={'Content-Type':'application/json', 'Authorization': 'Bearer {}'.format(access_token)})


вы можете попробовать что-то вроде этого

r = requests.get(ENDPOINT, params=params, headers={'Authorization': 'Basic %s' %  API_KEY})