2016-04-27 6 views
0

Ich habe ein Problem beim Konvertieren eines funktionierenden cURL-Aufrufs in eine interne API zu einem Python-Request-Aufruf.Python Requests API-Aufruf funktioniert nicht

Hier ist der Arbeits cURL Aufruf:

curl -k -H 'Authorization:Token token=12345' 'https://server.domain.com/api?query=query' 

Ich versuchte dann Skript diesen Anruf in einen Arbeits Python-Anfragen hier zu konvertieren:

#!/usr/bin/env python 
import requests 

url = 'https://server.domain.com/api?query=query' 
headers = {'Authorization': 'Token token=12345'} 

r = requests.get(url, headers=headers, verify=False) 

print r 

Ich bekomme ein HTTP 401 oder 500 Fehler je nachdem, wie Ich ändere die Header-Variablen um. Was ich nicht verstehe, ist, wie meine Python-Anfrage anders ist als die cURL-Anfrage. Sie werden beide vom selben Server wie derselbe Benutzer ausgeführt.

Jede mögliche Hilfe

+0

Mögliches Duplikat [Python-Anforderung mit Authentifizierung (access \ _token)] (http://stackoverflow.com/questions/13825278/python-request-with-authentication-access-token) –

Antwort

1

Fest geschätzt werden zu sagen, ohne zu wissen, api, aber Sie können eine Umleitung haben, dass curl ist, dass Anfragen zu Ehren nicht (oder zumindest die Header auf Umleitung nicht senden).

Versuchen Sie, ein Sitzungsobjekt zu verwenden, um sicherzustellen, dass alle Anfragen (und Weiterleitungen) Ihre Kopfzeile haben.

#!/usr/bin/env python 
import requests 

url = 'https://server.domain.com/api?query=query' 
headers = {'Authorization': 'Token token=12345'} 

#start a session 
s = requests.Session() 

#add headers to session 
s.headers.update(headers) 

#use session to perform a GET request. 
r = s.get(url) 

print r 
+0

Wenn ich Ihr Skript ausprobiere, bekomme ich einen HTTP 500 internen Dienst Fehler zurückgegeben. '' Ich habe das API-Server-Zugriffsprotokoll apache ssl getailt und bestätigt, dass es eine 500-Antwort gab. –

0

ich es herausgefunden, es stellt sich heraus, dass ich den „accept“ Header-Wert angeben hatte, sieht das Arbeits Skript wie folgt:

#!/usr/bin/env python 
import requests 

url = 'https://server.domain.com/api?query=query' 
headers = {'Accept': 'application/app.app.v2+json', 'Authorization': 'Token token=12345'} 

r = requests.get(url, headers=headers, verify=False) 

print r.json()