Ich spiele mit der Google Checkout-API und möchte sie in eine Django-App integrieren. Ich muss Daten mit einer einfachen http-Authentifizierung an Google senden. Ich habe das mit curl
wie folgt getestet:
Und das posten den Inhalt meiner Test-XML-Datei an Google. Und es funktioniert gut!
Aber ich habe Probleme, diese einfache Zeile nach Python zu portieren. Ich habe mehrere Wege (httplib2, urllib2, pycurl) geschafft, mit einem Passwort zu verbinden und etwas zu posten, aber die Antwort ist immer 400 BAD REQUEST.
Gibt es eine Python-Entsprechung für die Veröffentlichung eines Textblocks auf einem HTTP Basic-Authentifizierungsserver? Ich renne aus den Wänden, um gegen meinen Kopf zu stoßen.
Entschuldigen Sie, dass Sie keinen Code hinzugefügt haben. Hier sind einige meiner größten Hits. In jedem ist DATA
eine XML-Zeichenfolge. URL
, USERNAME
und PASSWORD
sind konstant.
Gibt mir eine schöne HTTP Error 400: Bad Request
Gibt HTTP Error 401: Unauthorized
Es scheint schwierig zu sein, die Zeichenfolge DATA
als POSTFIELD zu übergeben. Ich habe urllib.urlencode()
ing DATA auf verschiedene Arten versucht, aber
Die Anmeldeinformationen scheinen nichts zu tun - ich bekomme eine unautorisierte Nachricht von Google zurück.
Es gibt mehr, aber alle basieren auf diesen.
Ich hatte ähnliche Turbulenzen mit den stdlib-Paketen, bis jemand auf die geniale Anfragen , die grundlegende HTTP-Authentifizierung und andere Authentifizierung unterstützt, bedeutet sofort out-of-the-Box! Und es hat eine schöne und einfache API, es tut weh!
%Vor%Es unterstützt eine Vielzahl anderer notwendiger Funktionen (z. B. HTTPS, Digest-Authentifizierung, usw.) Bitte überprüfen Sie es, wenn Sie müssen ...
Während ich meinen Post bearbeitet habe, um eine Quelle hinzuzufügen, dachte ich, ich hätte einen weiteren Crack bei httplib2
(hauptsächlich weil er im Vergleich zu den anderen vergleichsweise klein und hübsch ist) und bemerkte, dass es ein klaffender Fehler , da seine Methode add_credentials(..)
eigentlich gar nichts macht. Sie können dies umgehen, indem Sie den Header (wie ich es mit urllib2
gemacht habe) wie folgt angeben:
Und das funktioniert.
Voidspace hat einen exzellenten Artikel zur Verwendung von basic auth mit urllib2. Ich habe das entsprechende Code-Snippet unten kopiert, geändert, um POST zu verwenden.
%Vor%Ohne Ihren Code zu sehen, ist es schwer zu sagen, warum Sie eine Antwort von 400 bekommen würden.