2013-09-28 4 views
31

У меня есть URI запроса и токен. Если я использую:Python запрашивает библиотеку, как передать заголовок авторизации с одним токеном

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

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

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>')) 

Но ни одна из этих работ.

ответ

39

В питона:

('<MY_TOKEN>') 

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

'<MY_TOKEN>' 

И запросы интерпретирует

('TOK', '<MY_TOKEN>') 

Как желая запросы использовать обычную проверку подлинности и ремесленных-заголовок авторизации следующим образом:

'VE9LOjxNWV9UT0tFTj4K' 

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

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

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

Traceback (последний последний звонок): Файл «», строка 1, в Файл "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py ", строка 55, в get запрос возврата ('get', url, ** kwargs) Файл" /Library/Frameworks/Python.framework/Versions/2.7/lib/ python2.7/site-packages/requests/api.py ", строка 44, в запросе return session.request (метод = метод, url = url, ** kwargs) Файл" /Library/Frameworks/Python.framework/ Версии/2.7/lib/python2.7/site-packages/requests/sessions.py ", строка 323, в запросе prep = self.prepare_request (req) –

+0

@rebHelium вы можете [gist] (https: // gist. github.com), что? Это не целая трассировка стека, и нет никаких указаний на то, что вы на самом деле пытались. –

+0

Извините, Stack Overflow не позволил мне опубликовать весь вывод. Я сделал точно так же, как вы предложили: r = request.get ('any url i have', headers = {'Authorization': 'TOK: любой токен у меня есть}} –

16

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

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

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

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

В моем случае, не было никакого пароля, так Я оставил второй параметр в поле Идента пустым, как показано ниже:

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

Надеется, что это помогает кому-нибудь :)

+0

, если вы попробуете 'r = requests.get ('', auth = (''))', вы получите 'TypeError: 'str' объект не вызываемый'. что натолкнуло меня на некоторое время, пока я не натолкнулся на это: / – aydow

0

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

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

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

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

with requests.Session() as s: 

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

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

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

Смежные вопросы