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

Ця зміна належить до документованої реалізації стандартної бібліотеки. HTTP-бібліотека вищого рівня може перевизначати або обгортати поведінку тунелю, тому записуйте її версію, а також версію Python.

Якщо проксі відхиляє тунель, дослідіть обмін CONNECT, який цей клієнт справді створив. Зміна версії HTTP у запиті до призначення або додавання заголовка Host до запиту до сайту не обов'язково змінює попередній запит тунелю.

Так само редагування приватних полів у старому прикладі адаптера Requests може прив'язати застосунок до застарілого внутрішнього API. Надавайте перевагу сумісному й підтримуваному поєднанню клієнта та середовища виконання і документованій інтеграції з проксі.

Тримайте дві розмови в звіті окремо: HTTP-запит, використаний для відкриття тунелю, а потім протокол, узгоджений із призначенням усередині нього. Вони можуть використовувати різні версії та зазнавати збоїв на різних етапах.

Схожі статті