HTTPS POST-Anfrage Python

8

Ich möchte eine Post-Anfrage an eine HTTPS-Site stellen, die mit einer .csv-Datei antworten soll. Ich habe diesen Python-Code:

%Vor%

Aber ich bekomme den Fehler:

%Vor%

Ich habe die Postanforderung mit der Chrome-Erweiterung ausprobiert: Erweiterter REST-Client (Screenshot) und das funktioniert einwandfrei.

Was könnte das Problem sein und wie könnte ich es lösen? (Ist es wegen der HTTPS?)

EDIT, refaktorierter Code:

%Vor%

= & gt; Gibt einen BadStatusLine: '' Fehler

%Vor%

Ausgabe:

%Vor%

Was mache ich falsch?

    
francisMi 17.01.2013, 17:55
quelle

4 Antworten

2

Der BadStatusLine: '' (in httplib.py) verrät, dass hier noch etwas anderes vor sich geht. Dies kann passieren, wenn der Server überhaupt keine Antwort zurücksendet und nur die Verbindung schließt.

Da Sie erwähnt haben, dass Sie eine SSL-Verbindung verwenden, könnte dies für das Debuggen besonders interessant sein (mit curl -v URL , wenn Sie möchten). Wenn Sie herausfinden, dass curl -2 URL (was die Verwendung von SSLv2 erzwingt) scheinbar funktioniert, während curl -3 URL (SSLv3) nicht funktioniert, sollten Sie sich das Problem ansehen #13636 und möglicherweise # 11220 auf dem Python-Bugtracker. Abhängig von Ihrer Python-Version & amp; Bei einem möglicherweise falsch konfigurierten Webserver kann dies ein Problem verursachen: Die SSL-Standardeinstellungen haben sich in Version 2.7.3 geändert.

    
Cedric VB 10.03.2013, 23:44
quelle
9

Gibt es einen Grund, warum du urllib benutzen musst? Anfragen ist einfacher, besser in fast jeder Hinsicht und abstrahiert einige der Nachteile, die urllib schwer machen damit zu arbeiten.

Als Beispiel würde ich Ihr Beispiel wie folgt umarbeiten:

%Vor%

Zu diesem Zeitpunkt ist die Antwort vom Server in resp.text verfügbar und Sie können damit tun, was Sie möchten. Wenn die Anfragen nicht ordnungsgemäß gesendet werden konnten (z. B. weil Sie ein benutzerdefiniertes SSL-Zertifikat benötigen), sollten Sie eine gute Fehlermeldung erhalten, die Ihnen erklärt, warum.

Auch wenn Sie dies in Ihrer Produktionsumgebung nicht tun können, tun Sie dies in einer lokalen Shell, um zu sehen, welche Fehlermeldungen Sie von requests erhalten, und verwenden Sie diese, um urllib zu debuggen.

    
Dan 04.03.2013 23:51
quelle
1
%Vor%     
bioffe 17.01.2013 20:55
quelle
0

Der Server mag die fehlenden Header, insbesondere User-Agent und Content-Type, nicht mögen. Das Chrome-Bild zeigt, was für diese verwendet wird. Vielleicht versuchen Sie, die Header hinzuzufügen:

%Vor%

Dies ist nicht getesteter Code. Vielleicht möchten Sie experimentieren, indem Sie andere Header-Werte hinzufügen, die Ihrem Screenshot entsprechen. Hoffe es hilft.

    
Fiver 09.03.2013 22:36
quelle

Tags und Links