An old statement that Python always sends HTTP/1.0 for CONNECT is no longer a safe general rule. Python 3.12 changed http.client tunnelling to HTTP/1.1 and added automatic Host-header generation when it is not supplied.

That change belongs to the documented standard-library implementation. A higher-level HTTP library can override or wrap tunnelling behavior, so record its version as well as Python's version.

If a proxy rejects the tunnel, inspect the CONNECT exchange actually produced by that client. Changing the destination request's HTTP version or adding a Host header to the website request does not necessarily change the earlier tunnel request.

Likewise, editing private fields in an old Requests adapter example can lock the application to an obsolete internal API. Prefer a compatible supported client/runtime combination and a documented proxy integration.

Keep the two conversations separate in the report: the HTTP request used to open the tunnel, then the protocol negotiated with the destination inside it. They can use different versions and fail at different stages.

Artihkkalat mat laktásit