2016-08-30 3 views
0

Dieses von der Kommandozeile arbeitet:Python - Curl-Werke, fordert lib nicht

curl -H "Content-Type: application/json" -X POST -d '<my data>' http://my_user:[email protected]_url 

Das funktioniert nicht von einem Python-Skript:

res=requests.post(
    'http://my_user:[email protected]_url', 
    json='<my data>') 

Was passiert ist, es trifft der Server, aber nicht autorisiert. Das REST-API mit Django Ruhe Framework integriert, und ich

{"detail":"Invalid username/password."} 

http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/

Passwort enthält diese Sonderzeichen% (\

I \ entkommen, so dass es einen doppelten Schrägstrich ist. Ich habe auch versucht, mit r vor Zeichenfolge und 4 umgekehrten Schrägstrichen.

habe ich versucht, mit auth=('my_user','my_pass') mit den verschiedenen Fluchten zu.

Ich lief es durch http://curl.trillworks.com/ und immer noch hat das nicht funktioniert.

Morgen werde ich mein Passwort zu etwas Einfachem ändern und testen.

Wenn das nicht funktioniert, gebe ich auf und am Ende ein Bash-Skript, das nur diesen Curl-Befehl ausführt.

+0

Verwenden Sie den Auth-Parameter zum Übergeben von Anmeldeinformationen. –

+0

Was übermittelst du als Daten und was benutzt du, wenn du 'auth = ...' benutzt? –

Antwort

0

Ich entkam \, so ist es ein doppelter Schrägstrich ist. Ich habe auch versucht, mit r vor von String und 4 Backslashes.

Das \ in der Curl-Befehl war eine Klammer entkommen. Es war nicht Teil des Passworts.

Ich habe es entfernt und jetzt funktioniert es.

2

Sie müssen versuchen, die Authentifizierungseinstellung mit requests Bibliothek wie folgt aus:

from requests.auth import HTTPBasicAuth 

response = requests.post(url, json=payload, auth=HTTPBasicAuth('user', 'pass')) 

http://docs.python-requests.org/en/master/user/authentication/#basic-authentication

+0

'auth = ('user', 'pass')' ist genau das selbe wie das Importieren von HTTPBasicAuth und tut es selbst, was das OP schon versucht hat, entsprechend ihrer Frage, also sollte es keinen Unterschied geben. –

+0

Ja, beide haben funktioniert. Mein Problem war der Backslash in der Curl-Anweisung war, die Klammer zu entkommen, und nicht Teil des Passworts selbst. – steve76