@@ -73,7 +73,9 @@ def SOCKSProxyManager(*args, **kwargs):
7373
7474
7575def _urllib3_request_context (
76- request : "PreparedRequest" , verify : "bool | str | None"
76+ request : "PreparedRequest" ,
77+ verify : "bool | str | None" ,
78+ client_cert : "typing.Tuple[str, str] | str | None" ,
7779) -> "(typing.Dict[str, typing.Any], typing.Dict[str, typing.Any])" :
7880 host_params = {}
7981 pool_kwargs = {}
@@ -86,6 +88,14 @@ def _urllib3_request_context(
8688 if isinstance (verify , str ):
8789 pool_kwargs ["ca_certs" ] = verify
8890 pool_kwargs ["cert_reqs" ] = cert_reqs
91+ if client_cert is not None :
92+ if isinstance (client_cert , tuple ) and len (client_cert ) == 2 :
93+ pool_kwargs ["cert_file" ] = client_cert [0 ]
94+ pool_kwargs ["key_file" ] = client_cert [1 ]
95+ else :
96+ # According to our docs, we allow users to specify just the client
97+ # cert path
98+ pool_kwargs ["cert_file" ] = client_cert
8999 host_params = {
90100 "scheme" : scheme ,
91101 "host" : parsed_request_url .hostname ,
@@ -354,13 +364,13 @@ def build_response(self, req, resp):
354364
355365 return response
356366
357- def _get_connection (self , request , verify , proxies = None ):
367+ def _get_connection (self , request , verify , proxies = None , cert = None ):
358368 # Replace the existing get_connection without breaking things and
359369 # ensure that TLS settings are considered when we interact with
360370 # urllib3 HTTP Pools
361371 proxy = select_proxy (request .url , proxies )
362372 try :
363- host_params , pool_kwargs = _urllib3_request_context (request , verify )
373+ host_params , pool_kwargs = _urllib3_request_context (request , verify , cert )
364374 except ValueError as e :
365375 raise InvalidURL (e , request = request )
366376 if proxy :
@@ -509,7 +519,7 @@ def send(
509519 """
510520
511521 try :
512- conn = self ._get_connection (request , verify , proxies )
522+ conn = self ._get_connection (request , verify , proxies = proxies , cert = cert )
513523 except LocationValueError as e :
514524 raise InvalidURL (e , request = request )
515525
0 commit comments