Python http.client CONNECT: HTTP/1.1 seit Python 3.12
Prüfen Sie die Python- und Transportimplementierung, bevor Sie alte HTTP/1.0-CONNECT-Workarounds anwenden.
Die alte Aussage, Python sende für CONNECT immer HTTP/1.0, ist keine sichere allgemeine Regel mehr. Python 3.12 hat das Tunneling von http.client auf HTTP/1.1 umgestellt und die automatische Erzeugung des Host-Headers ergänzt, wenn er nicht angegeben wird.
Diese Änderung gehört zur dokumentierten Implementierung der Standardbibliothek. Eine HTTP-Bibliothek höherer Ebene kann das Tunnelverhalten überschreiben oder umhüllen, daher sollten Sie ihre Version ebenso wie die Python-Version festhalten.
Wenn ein Proxy den Tunnel ablehnt, untersuchen Sie den CONNECT-Austausch, den dieser Client tatsächlich erzeugt. Die HTTP-Version der Zielanfrage zu ändern oder der Website-Anfrage einen Host-Header hinzuzufügen, ändert nicht zwangsläufig die frühere Tunnelanfrage.
Ebenso kann das Bearbeiten privater Felder in einem alten Requests-Adapter-Beispiel die Anwendung an eine veraltete interne API binden. Bevorzugen Sie eine kompatible, unterstützte Kombination aus Client und Laufzeit sowie eine dokumentierte Proxy-Integration.
Halten Sie die beiden Gespräche im Bericht getrennt: die HTTP-Anfrage, mit der der Tunnel geöffnet wird, und dann das Protokoll, das darin mit dem Ziel ausgehandelt wird. Sie können unterschiedliche Versionen verwenden und in verschiedenen Phasen scheitern.