
    iX>                        S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	   S SK
r
 S SKr S SKJr  SSKJrJr  SSKJr  SS	KJr  S
r " S S\5      r " S S\5      r\R4                  S:  a  \" S\R8                   S35        \R:                  r\R:                  r\R>                  r\R@                  r g! \ a     Nf = f! \ a    S SKr Nf = f! \ a	    S SKJr   Nf = f)    N)HTTPAdapter)Session)dump)urlparse   )CloudflareLoopProtectionCloudflareIUAMError)
Cloudflare)
User_Agentz1.2.71c                   N   ^  \ rS rSr/ SQrU 4S jrS rU 4S jrU 4S jrSr	U =r
$ )CipherSuiteAdapter.   )ssl_contextmax_retriesconfig_pool_connections_pool_maxsize_pool_blocksource_addressc                   > UR                  SS 5      U l        UR                  SS 5      U l        UR                  SS 5      U l        UR                  SS 5      U l        UR                  SS5      U l        U R                  (       a\  [        U R                  [        5      (       a  U R                  S4U l        [        U R                  [        5      (       d  [        S5      eU R                  (       Gd;  [        R                  " [        R                  R                  5      U l        U R                  R                  U R                  l        U R                  U R                  l        U R                  (       a  U R                  U R                  l        U R                  R!                  U R                  5        U R                  R#                  U R
                  5        [        R$                  R&                  U R                  l        [        R$                  R*                  U R                  l        [.        [0        U ]f  " S	0 UD6  g )
Nr   cipherSuiter   server_hostname	ecdhCurve
prime256v1r   z<source_address must be IP address string or (ip, port) tuple )popr   r   r   r   r   
isinstancestrtuple	TypeErrorsslcreate_default_contextPurposeSERVER_AUTHwrap_socketorig_wrap_socketset_ciphersset_ecdh_curve
TLSVersionTLSv1_2minimum_versionTLSv1_3maximum_versionsuperr   __init__selfargskwargs	__class__s      B/app/mltbenv/lib/python3.13/site-packages/cloudscraper/__init__.pyr/   CipherSuiteAdapter.__init__:   s   !::mT:!::mT:$jj)94@%zz*;TBK>$--s33'+':':A&>#d11599R  "99#++:Q:QRD040@0@0L0LD-+/+;+;D(##373G3G  0(()9)9:++DNN;/2~~/E/ED,/2~~/E/ED, $0:6:    c                    [        U R                  S5      (       aF  U R                  R                  (       a+  U R                  R                  US'   SU R                  l        OSU R                  l        U R                  R                  " U0 UD6$ )Nr   FT)hasattrr   r   check_hostnamer&   )r1   r2   r3   s      r5   r%   CipherSuiteAdapter.wrap_socket]   ss    4##%677D<L<L<\<\(,(8(8(H(HF$%.3D+.2D+00$A&AAr7   c                 h   > U R                   US'   U R                  US'   [        [        U ]  " U0 UD6$ Nr   r   )r   r   r.   r   init_poolmanagerr0   s      r5   r>   #CipherSuiteAdapter.init_poolmanagerh   s<     $ 0 0}#'#6#6 '?PPPr7   c                 h   > U R                   US'   U R                  US'   [        [        U ]  " U0 UD6$ r=   )r   r   r.   r   proxy_manager_forr0   s      r5   rA   $CipherSuiteAdapter.proxy_manager_foro   s<     $ 0 0}#'#6#6 '@$Q&QQr7   r   r   r   r   r   )__name__
__module____qualname____firstlineno__	__attrs__r/   r%   r>   rA   __static_attributes____classcell__r4   s   @r5   r   r   .   s(    I;FBQR Rr7   r   c                      ^  \ rS rSrU 4S jrS rU 4S jrS r\S 5       r	S r
S r\SS	 j5       r\S
 5       r\S 5       rSrU =r$ )CloudScraperw   c                   > UR                  SS5      U l        UR                  SS5      U l        UR                  SS 5      U l        UR                  S0 5      U l        UR                  SS5      U l        UR                  SS	5      U l        UR                  S
S 5      U l        UR                  SS 5      U l        UR                  SS 5      U l	        UR                  SS5      U l
        UR                  SS 5      U l        UR                  SS 5      U l        UR                  SS 5      U l        UR                  SS[        R                  R!                  5       ;   a  SOS5      U l        [%        U R"                  UR                  SS 5      S9U l        SU l        UR                  SS5      U l        [,        [.        U ]b  " U0 UD6  SU R2                  S   ;   aG  U R&                  R2                  U l        U R                  (       d  U R&                  R                  U l	        [5        U R                  [6        5      (       a   SR9                  U R                  5      U l	        U R;                  S[=        U R                  U R                  U R                  U R                  U R                  S95        [>        R@                  " [B        RD                  S 5        g )NdebugFdisableCloudflareV1delaycaptcha
doubleDownTinterpreternativerequestPreHookrequestPostHookr   r   r   r   r   r   allow_brotlibrotlibrowser)rY   r[   r   
solveDepth   requests
User-Agent:zhttps://rC   c                 4    U R                   U R                  44$ N)r4   protocol)objs    r5   <lambda>'CloudScraper.__init__.<locals>.<lambda>   s    CMMCLL?3Sr7   )#r   rP   rQ   rR   rS   rT   rU   rW   rX   r   r   r   r   r   sysmoduleskeysrY   r   
user_agent_solveDepthCntr\   r.   rM   r/   headersr   listjoinmountr   copyregpickler!   
SSLContextr0   s      r5   r/   CloudScraper.__init__y   s>   ZZ/
#)::.CU#K ZZ.
zz)R0 **\48!::mX>$jj)94@%zz*;TB!::mT:K>$jj)94@%zz*;TB!::mT:"JJ 0 0 22D

 %**JJy$/

   **\15lD*D;F; l33  ??22DL###'??#>#> d&&--"xx(8(89D

 ,,.. $ 4 4#22 ,,		
 	s~~'STr7   c                     U R                   $ rb   )__dict__)r1   s    r5   __getstate__CloudScraper.__getstate__   s    }}r7   c                 4   > [         [        U ]
  " X/UQ70 UD6$ rb   )r.   rM   request)r1   methodurlr2   r3   r4   s        r5   perform_requestCloudScraper.perform_request   s    \40NtNvNNr7   c                 6    SU l         S[        l        U" U5      e)Nr   )rk   rg   tracebacklimit)r1   	exceptionmsgs      r5   simpleExceptionCloudScraper.simpleException   s    nr7   c           	           [        [        R                  " U 5      R                  SSS95        g ! [         a#  n[        S[        USU5       35         S nAg S nAff = f)Nzutf-8backslashreplace)errorszDebug Error: message)printr   dump_alldecode
ValueErrorgetattr)reqes     r5   debugRequestCloudScraper.debugRequest   sU    	>$--$++G<N+OP 	>M'!Y":!;<==	>s   -0 
AAAc                    [         R                  R                  R                  S:  a  UR                  R                  S5      S:X  a  U R                  (       a8  UR                  (       a'  [        R                  " UR                  5      Ul        U$ [        R                  " S[         R                  R                  R                   S35        U$ )Nz1.25.1zContent-EncodingbrzYou're running urllib3 z, Brotli content detected, Which requires manual decompression, But option allow_brotli is set to False, We will not continue to decompress.)r^   packagesurllib3__version__rl   getrY   _contentrZ   
decompresscontentloggingwarning)r1   resps     r5   decodeBrotliCloudScraper.decodeBrotli   s    $$008;@P@PQc@dhl@l  T]] & 1 1$,, ?  .x/@/@/H/H/T/T.U V: : r7   c                    UR                  S5      (       a5  UR                  S5      U R                  :w  a  UR                  S5      U l        U R                  (       a  U R                  " U UU/UQ70 UD6u  pp4U R                  U R                  " X/UQ70 UD65      nU R
                  (       a  U R                  U5        U R                  (       aE  U R                  X5      nXV:w  a/  UnU R
                  (       a  [        S5        U R                  U5        U R                  (       d  [        U 5      nUR                  U5      (       aj  U R                  U R                  :  a&  U R                  nU R                  [        SU S35        U =R                  S-  sl        UR                   " U40 UD6nU$ UR"                  (       d  UR$                  S;  a  SU l        U$ )Nproxiesz==== requestPostHook Debug ====z+!!Loop Protection!! We have tried to solve z time(s) in a row.r   )i  i  r   )r   r   rW   r   r|   rP   r   rX   r   rQ   r
   is_Challenge_Requestrk   r\   r   r   Challenge_Responseis_redirectstatus_code)	r1   rz   r{   r2   r3   responsenewResponsecloudflareV1_s	            r5   ry   CloudScraper.request   s   ::i  VZZ	%:dll%J!::i0DL *.*=*=+ 	+
 +'V$ $$  >t>v>
 ::h' ..t>K&&::;<%%h/ ''%d+L 00::
 &&$//9++A((0EaSHZ[
 ##q(#'::8NvN
   ++0D0DJ0V*+D'r7   c                 p    U " S0 UD6nU(       a&  S H   n[        XS5      nUc  M  [        X4U5        M"     U$ )zF
Convenience function for creating a ready-to-go CloudScraper object.
)authcertcookiesrl   hooksparamsr   dataNr   )r   setattr)clssessr3   scraperattrvals         r5   create_scraperCloudScraper.create_scraper:  s?    
 --dd$/?G3/ e
 r7   c                 n   U R                   " S
0 S Vs0 s H  nX2;   d  M
  X2R                  US 5      _M     snD6n UR                  " U40 UD6nUR                  5         [        UR                  5      R                  nS nUR                  R                  5        H(  nUR                  S5      (       d  M  USU 3;   d  M&  Un  O   U R                  U [        S5        SUR                  R                  SSUS90UR                  S	   4$ s  snf ! [         a    [
        R                  " SU S35        e f = f)N)
rY   r[   rP   rR   rT   rS   rU   r   rW   rX   "z." returned an error. Could not collect tokens..zoUnable to find Cloudflare cookies. Does the site actually have Cloudflare IUAM (I'm Under Attack Mode) enabled?cf_clearance )domainr_   r   )r   r   r   raise_for_status	Exceptionr   errorr   r{   netlocr   list_domains
startswithr   r	   rl   )	r   r{   r3   fieldr   r   r   cookie_domainds	            r5   
get_tokensCloudScraper.get_tokensM  sO   $$ 
==5 _ /zz%.. =
"	;;s-f-D!!#
 $((#**--/A||C  QQvh<%8 ! 0
 #H  3 3NB} 3 ] OOL)	
 	
O&  	MMAcU"PQR	s   	D	D	#D &D4c                 |    U R                   " U40 UD6u  p4SR                  S UR                  5        5       5      U4$ )z?
Convenience function for building a Cookie HTTP header value.
z; c              3   D   #    U  H  nS R                  U5      v   M     g7f)=N)rn   ).0pairs     r5   	<genexpr>1CloudScraper.get_cookie_string.<locals>.<genexpr>  s     CND$Ns    )r   rn   items)r   r{   r3   tokensrj   s        r5   get_cookie_stringCloudScraper.get_cookie_string  s:    
 !^^C:6:yyCFLLNCCZOOr7   )rk   rY   rS   r   rP   rR   rQ   rT   r   rl   rU   r   rX   rW   r   r\   r   r   rj   rb   )rD   rE   rF   rG   r/   rv   r|   r   staticmethodr   r   ry   classmethodr   r   r   rI   rJ   rK   s   @r5   rM   rM   w   sy    9U~O > >$J\  $ .
 .
d P Pr7   rM   )r   r   r   z<DEPRECATION: The OpenSSL being used by this python install (z) does not meet the minimum supported version (>= OpenSSL 1.1.1) in order to support TLS 1.3 required by Cloudflare, You may encounter an unexpected Captcha or cloudflare 1020 blocks.)!r   r^   rg   r!   requests.adaptersr   requests.sessionsr   requests_toolbelt.utilsr   rZ   ImportErrorrp   copy_regr   urllib.parse
exceptionsr   r	   
cloudflarer
   rj   r   r   r   rM   OPENSSL_VERSION_INFOr   OPENSSL_VERSIONr   sessionr   r   r   r7   r5   <module>r      s     
 
 ) % (	&!
 # " 
DR DRROP7 OPh i'	
FsGZGZF[ \M 	M ,,

%
%$$
 22 O  		
  
  &%&s3   B7 C C 7C ?C 
CCC"!C"