Старое утверждение, что Python всегда отправляет HTTP/1.0 для CONNECT, больше не является безопасным общим правилом. Python 3.12 изменил туннелирование в http.client на HTTP/1.1 и добавил автоматическое создание заголовка Host, если он не задан.

Это изменение относится к документированной реализации стандартной библиотеки. HTTP-библиотека более высокого уровня может переопределять или оборачивать поведение туннеля, поэтому записывайте её версию, а также версию Python.

Если прокси отклоняет туннель, изучите обмен CONNECT, который этот клиент действительно создал. Изменение версии HTTP в запросе к назначению или добавление заголовка Host в запрос к сайту не обязательно меняет предыдущий запрос туннеля.

Точно так же редактирование закрытых полей в старом примере адаптера Requests может привязать приложение к устаревшему внутреннему API. Предпочитайте совместимое и поддерживаемое сочетание клиента и среды выполнения и документированную интеграцию с прокси.

Держите два разговора в отчёте раздельно: HTTP-запрос, использованный для открытия туннеля, а затем протокол, согласованный с назначением внутри него. Они могут использовать разные версии и сбоить на разных этапах.

Похожие статьи