2013-09-28 13 views
31

Ho un URI di richiesta e un token. Se utilizzo:Python richiede libreria come passare l'intestazione Authorization con un singolo token

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

ecc., Ottengo un 200 e visualizzo i dati JSON corrispondenti. Quindi, ho installato le richieste e quando tento di accedere a questa risorsa ottengo un 403 probabilmente perché non conosco la sintassi corretta per passare quel token. Qualcuno può aiutarmi a capirlo? Questo è quello che ho:

import sys,socket 
import requests 

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

Ho già provato:

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

Ma nessuno di questi lavori.

risposta

39

in Python:

('<MY_TOKEN>') 

è equivalente a

'<MY_TOKEN>' 

e richieste interpreta

('TOK', '<MY_TOKEN>') 

Come voi che vogliono le richieste di utilizzare l'autenticazione di base e mestieri un'intestazione di autorizzazione in questo modo:

'VE9LOjxNWV9UT0tFTj4K' 

che è la rappresentazione di Base64 'TOK:<MY_TOKEN>'

di passare il vostro propria intestazione si passa in un dizionario in questo modo:

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

Traceback (ultima chiamata più recente): File "", riga 1, in File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py ", riga 55, in get richiesta di reso ('get', url, ** kwargs) File" /Library/Frameworks/Python.framework/Versions/2.7/lib/ python2.7/site-packages/requests/api.py ", riga 44, nella richiesta return session.request (method = method, url = url, ** kwargs) File" /Library/Frameworks/Python.framework/ Versioni/2.7/lib/python2.7/site-packages/requests/sessions.py ", riga 323, in richiesta prep = self.prepare_request (req) –

+0

@rebHelium puoi [gist] (https: // gist. github.com)? Questa non è l'intera traccia dello stack e non c'è alcuna indicazione su ciò che hai effettivamente provato. –

+0

Mi dispiace, Stack Overflow non mi ha permesso di postare l'intero output. Ho fatto esattamente quello che hai suggerito: r = requests.get ('Qualunque url ho', intestazioni = {'Autorizzazione': 'TOK: qualsiasi token che ho'}) –

16

ero alla ricerca di qualcosa di simile e sono imbattuto in this. Sembra che nella prima opzione che hai menzionato

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

"auth" prende due parametri: il nome utente e la password, quindi la dichiarazione reale dovrebbe essere

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

Nel mio caso, non vi era alcuna password, in modo ho lasciato il secondo parametro di autenticazione campo vuoto come illustrato di seguito:

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

Spero che questo aiuti qualcuno :)

+0

se provate 'r = requests.get ('', auth = (''))', otterrete 'TypeError: 'str' oggetto non è chiamabile'. che mi ha bloccato per un po 'fino a quando ho trovato questo: / – aydow

0

Si può provare qualcosa di simile

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

È inoltre possibile impostare le intestazioni per l'intera sessione:

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

with requests.Session() as s: 

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

Questo ha funzionato per me: access_token = # yourAccessTokenHere #

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