Veröffentlichen von Rohdaten mit Python

8

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:

%Vor%

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.

%Vor%

Gibt mir eine schöne HTTP Error 400: Bad Request

%Vor%

Gibt HTTP Error 401: Unauthorized

an %Vor%

Es scheint schwierig zu sein, die Zeichenfolge DATA als POSTFIELD zu übergeben. Ich habe urllib.urlencode() ing DATA auf verschiedene Arten versucht, aber

%Vor%

Die Anmeldeinformationen scheinen nichts zu tun - ich bekomme eine unautorisierte Nachricht von Google zurück.

Es gibt mehr, aber alle basieren auf diesen.

    
Oli 15.12.2011, 12:10
quelle

3 Antworten

12

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 ...

    
nemesisfixx 14.05.2012, 10:05
quelle
2

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:

%Vor%

Und das funktioniert.

    
Oli 15.12.2011 13:03
quelle
2

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.

    
Andrew Wilkinson 15.12.2011 12:47
quelle

Tags und Links