@@ -36,7 +36,8 @@ def __init__(
3636 random_tls_extension_order : Optional = False ,
3737 force_http1 : Optional = False ,
3838 catch_panics : Optional = False ,
39- debug : Optional = False
39+ debug : Optional = False ,
40+ certificate_pinning : Optional [Dict [str , List [str ]]] = None ,
4041 ) -> None :
4142 self ._session_id = str (uuid .uuid4 ())
4243 # --- Standard Settings ----------------------------------------------------------------------------------------
@@ -68,6 +69,9 @@ def __init__(
6869 # Timeout
6970 self .timeout_seconds = 30
7071
72+ # Certificate pinning
73+ self .certificate_pinning = certificate_pinning
74+
7175 # --- Advanced Settings ----------------------------------------------------------------------------------------
7276
7377 # Examples:
@@ -375,6 +379,11 @@ def execute_request(
375379 # maximum time to wait for a response
376380
377381 timeout_seconds = timeout_seconds or self .timeout_seconds
382+
383+ # --- Certificate pinning --------------------------------------------------------------------------------------
384+ # pins a certificate so that it restricts which certificates are considered valid
385+
386+ certificate_pinning = self .certificate_pinning
378387
379388 # --- Request --------------------------------------------------------------------------------------------------
380389 is_byte_request = isinstance (request_body , (bytes , bytearray ))
@@ -396,6 +405,8 @@ def execute_request(
396405 "requestCookies" : request_cookies ,
397406 "timeoutSeconds" : timeout_seconds ,
398407 }
408+ if certificate_pinning :
409+ request_payload ["certificatePinningHosts" ] = certificate_pinning
399410 if self .client_identifier is None :
400411 request_payload ["customTlsClient" ] = {
401412 "ja3String" : self .ja3_string ,
0 commit comments