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
Ausgabe:
%Vor%Was mache ich falsch?
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.
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.
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.