2013-09-28 5 views
31

Ich habe eine Anfrage URI und ein Token. Wenn ich folgendes verwende:Python fordert Bibliothek, wie Autorisierungsheader mit einzelnen Token übergeben

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

usw., bekomme ich eine 200 und sehe die entsprechenden JSON-Daten. So installierte ich Anfragen und wenn ich versuche, auf diese Ressource zuzugreifen, bekomme ich eine 403 wahrscheinlich, weil ich nicht die richtige Syntax kenne, um dieses Token zu übergeben. Kann mir jemand helfen, es herauszufinden? Das ist, was ich habe:

import sys,socket 
import requests 

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

ich schon versucht:

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

Aber keines dieser Arbeit.

Antwort

39

In Python:

('<MY_TOKEN>') 

entspricht

'<MY_TOKEN>' 

Und Anfragen interpretiert

('TOK', '<MY_TOKEN>') 

Wie Sie Anfragen wollen Standardauthentifizierung verwenden und wie so ein Berechtigungskopfhandwerk:

'VE9LOjxNWV9UT0tFTj4K' 

, die die base64 Darstellung 'TOK:<MY_TOKEN>'

ist Um Ihre eigenen Header Sie wie so in einem Wörterbuch passieren passieren:

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

Traceback (letzter Anruf zuletzt): Datei "", Zeile 1, in Datei "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/api.py ", Zeile 55, in get Rückgabeanforderung ('get', url, ** kwargs) Datei" /Library/Frameworks/Python.framework/Versions/2.7/lib/ python2.7/site-packages/requests/api.py ", Zeile 44, in Anfrage return session.request (Methode = Methode, URL = URL, ** kwargs) Datei" /Library/Frameworks/Python.framework/ Versionen/2.7/lib/python2.7/site-packages/requests/sessions.py ", Zeile 323, in Anfrage prep = self.prepare_request (req) –

+0

@rebHelium können Sie [gist] (https: // gist. github.com) das? Das ist nicht der ganze Stack-Trace und es gibt keinen Hinweis darauf, was Sie tatsächlich versucht haben. " –

+0

Sorry, Stack Overflow erlaubte mir nicht, die gesamte Ausgabe zu posten. Ich tat genau wie Sie vorgeschlagen: r = requests.get ('was auch immer URL ich habe, Header = {' Autorisierung ':' TOK: was auch immer Token ich habe '}) –

16

ich etwas ähnliches und kam über this suchen. Es sieht aus wie in der ersten Option, die Sie

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

„Auth“ hat zwei Parameter: Benutzername und Passwort, so dass die tatsächliche Aussage sollte

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

In meinem Fall gibt es kein Passwort, so ich verließ den zweiten Parameter in Auth Feld leer, wie unten dargestellt:

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

this helps jemand :)

+0

Wenn Sie versuchen, r = requests.get ('', auth = ('')) ', erhalten Sie' TypeError: 'str' Objekt ist nicht aufrufbar'. das hat mich für eine Weile überrascht, bis ich auf folgendes gestoßen bin: – aydow

0

Sie können so etwas wie dieses

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

versuchen Sie auch Header für die gesamte Sitzung festlegen:

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

with requests.Session() as s: 

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

Das ist für mich gearbeitet: access_token = # yourAccessTokenHere #

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