33from urllib3 .util .retry import Retry
44from requests .adapters import HTTPAdapter
55from ucloud .core .transport import http
6- from ucloud .core .transport .http import Request , Response
6+ from ucloud .core .transport .http import Request , Response , SSLOption
77from ucloud .core .utils .middleware import Middleware
88
99
@@ -32,7 +32,7 @@ def __init__(
3232 self ._adapter = self ._load_adapter (max_retries )
3333 self ._middleware = Middleware ()
3434
35- def send (self , req : Request , ** options : dict ) -> http .Response :
35+ def send (self , req : Request , ** options : typing . Any ) -> http .Response :
3636 """ send request and return the response
3737
3838 :param req: the full http request descriptor
@@ -56,24 +56,40 @@ def middleware(self) -> Middleware:
5656 """
5757 return self ._middleware
5858
59- def _send (self , req : Request , ** options : dict ) -> requests .Response :
59+ def _send (self , req : Request , ** options : typing . Any ) -> requests .Response :
6060 with requests .Session () as session :
6161 adapter = self ._load_adapter (options .get ("max_retries" ))
6262 session .mount ("http://" , adapter = adapter )
6363 session .mount ("https://" , adapter = adapter )
6464
65+ ssl_option = options .get ('ssl_option' )
66+ kwargs = self ._build_ssl_option (ssl_option ) if ssl_option else {}
67+
6568 session_resp = session .request (
6669 method = req .method .upper (),
6770 url = req .url ,
6871 json = req .json ,
6972 data = req .data ,
7073 params = req .params ,
7174 headers = req .headers ,
75+ ** kwargs
7276 )
7377 resp = self .convert_response (session_resp )
7478 resp .request = req
7579 return resp
7680
81+ @staticmethod
82+ def _build_ssl_option (ssl_option ):
83+ kwargs = {'verify' : ssl_option .ssl_verify and ssl_option .ssl_cacert }
84+ if not ssl_option .ssl_cert :
85+ return kwargs
86+
87+ if ssl_option .ssl_key :
88+ kwargs ['cert' ] = (ssl_option .ssl_cert , ssl_option .ssl_key )
89+ else :
90+ kwargs ['cert' ] = ssl_option .ssl_cert
91+ return kwargs
92+
7793 def _load_adapter (
7894 self , max_retries : typing .Optional [int ] = None
7995 ) -> HTTPAdapter :
0 commit comments