2013-09-28 13 views
31

Mam identyfikator URI żądania i token. Jeśli użyję:Python żąda biblioteki, jak przekazać nagłówek autoryzacji z pojedynczym tokenem

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

itd., Otrzymuję 200 i wyświetl odpowiednie dane JSON. Tak więc, zainstalowałem żądania i kiedy próbuję uzyskać dostęp do tego zasobu, otrzymuję 403 prawdopodobnie dlatego, że nie znam prawidłowej składni do przekazania tego tokena. Czy ktoś może mi pomóc to rozgryźć? To jest to, co mam:

import sys,socket 
import requests 

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

Próbowałem już:

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

ale żaden z tych prac.

Odpowiedz

39

W python:

('<MY_TOKEN>') 

jest równoważna

'<MY_TOKEN>' 

i wnioski interpretuje

('TOK', '<MY_TOKEN>') 

Jak chcąc żądań użyć uwierzytelniania podstawowego i spreparować nagłówek autoryzacji tak:

'VE9LOjxNWV9UT0tFTj4K' 

Który reprezentacji base64 z 'TOK:<MY_TOKEN>'

Aby przekazać swój własny nagłówek przejechania w słowniku tak:

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

Traceback (ostatnie ostatnie połączenie): Plik "", wiersz 1, w Plik "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py ", wiersz 55, otrzymujemy żądanie zwrotu ('get', url, ** kwargs) Plik" /Library/Frameworks/Python.framework/Versions/2.7/lib/ python2.7/site-packages/requests/api.py ", wiersz 44, w żądaniu return session.request (method = method, url = url, ** kwargs) Plik" /Library/Frameworks/Python.framework/ Wersje/2.7/lib/python2.7/site-packages/requests/sessions.py ", wiersz 323, na żądanie prep = self.prepare_request (req) –

+0

@rebHelium czy możesz [istota] (https: // gist. github.com) that? To nie jest cały ślad stosu i nie ma wskazania, co faktycznie próbowałeś. –

+0

Niestety, Stack Overflow nie pozwoliła mi opublikować całego wyniku.Popełniłem dokładnie tak, jak zasugerowałeś: r = requests.get ("jakikolwiek URL mam", nagłówki = {'Autoryzacja': 'TOK: dowolny token mam'}) –

16

szukałem czegoś podobnego i natknąłem this. To wygląda jak w pierwszej opcji wspomniałeś

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

„auth” pobiera dwa parametry: nazwę użytkownika i hasło, więc rzeczywista oświadczenie powinno być

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

W moim przypadku nie było hasłem, tak wyszedłem z drugiego parametru w polu auth pusty, jak pokazano poniżej:

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

Nadzieja to pomaga komuś :)

+0

jeśli spróbujesz 'r = requests.get ('', auth = (''))', otrzymasz 'TypeError: 'obiekt' str 'nie jest możliwy do wywołania'. to mnie zaskoczyło przez jakiś czas, dopóki nie natknąłem się na to: / – aydow

0

Można spróbować coś takiego

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

Można również ustawić nagłówki dla całej sesji:

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

with requests.Session() as s: 

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

ten pracował dla mnie: access_token = # yourAccessTokenHere #

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

Powiązane problemy