1414from .vendored import requests
1515from .vendored .requests import Response , Session
1616from .vendored .requests .adapters import BaseAdapter , HTTPAdapter
17- from .vendored .requests .exceptions import InvalidProxyURL
17+ from .vendored .requests .exceptions import InvalidProxyURL , InvalidURL
1818from .vendored .requests .utils import prepend_scheme_if_needed , select_proxy
1919from .vendored .urllib3 import PoolManager , Retry
2020from .vendored .urllib3 .poolmanager import ProxyManager
2323if TYPE_CHECKING :
2424 from .vendored .urllib3 .connectionpool import HTTPConnectionPool , HTTPSConnectionPool
2525
26-
2726logger = logging .getLogger (__name__ )
2827REQUESTS_RETRY = 1 # requests library builtin retry
2928
@@ -60,19 +59,25 @@ def wrapper(self, *args, **kwargs):
6059class ProxySupportAdapter (HTTPAdapter ):
6160 """This Adapter creates proper headers for Proxy CONNECT messages."""
6261
63- def get_connection (
64- self , url : str , proxies : dict | None = None
62+ def get_connection_with_tls_context (
63+ self , request , verify , proxies = None , cert = None
6564 ) -> HTTPConnectionPool | HTTPSConnectionPool :
66- proxy = select_proxy (url , proxies )
67- parsed_url = urlparse (url )
68-
65+ proxy = select_proxy (request .url , proxies )
66+ try :
67+ host_params , pool_kwargs = self .build_connection_pool_key_attributes (
68+ request ,
69+ verify ,
70+ cert ,
71+ )
72+ except ValueError as e :
73+ raise InvalidURL (e , request = request )
6974 if proxy :
7075 proxy = prepend_scheme_if_needed (proxy , "http" )
7176 proxy_url = parse_url (proxy )
7277 if not proxy_url .host :
7378 raise InvalidProxyURL (
74- "Please check proxy URL. It is malformed"
75- " and could be missing the host."
79+ "Please check proxy URL. It is malformed "
80+ "and could be missing the host."
7681 )
7782 proxy_manager = self .proxy_manager_for (proxy )
7883
@@ -85,17 +90,22 @@ def get_connection(
8590 # Note: netloc also keeps user-info (user:pass@host) if present in URL. The driver never sends
8691 # URLs with embedded credentials, so we leave them unhandled — for full support
8792 # we’d need to manually concatenate hostname with optional port and IPv6 brackets.
93+ parsed_url = urlparse (request .url )
8894 proxy_manager .proxy_headers ["Host" ] = parsed_url .netloc
8995 else :
9096 logger .debug (
9197 f"Unable to set 'Host' to proxy manager of type { type (proxy_manager )} as"
9298 f" it does not have attribute 'proxy_headers'."
9399 )
94- conn = proxy_manager .connection_from_url (url )
100+
101+ conn = proxy_manager .connection_from_host (
102+ ** host_params , pool_kwargs = pool_kwargs
103+ )
95104 else :
96105 # Only scheme should be lower case
97- url = parsed_url .geturl ()
98- conn = self .poolmanager .connection_from_url (url )
106+ conn = self .poolmanager .connection_from_host (
107+ ** host_params , pool_kwargs = pool_kwargs
108+ )
99109
100110 return conn
101111
0 commit comments