
    iN                        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JrJr  SSKJrJrJrJrJrJr  SS	KJr  SS
KJr   " S S5      rg! \ a    \R                  S:  a  S SK
r
 NLS SKJr   NTf = f! \ a    S SKJrJr   N_f = f)    N)deepcopy)OrderedDict)
HTMLParser      )urlparseurljoin   )CloudflareCode1020CloudflareIUAMErrorCloudflareSolveErrorCloudflareChallengeErrorCloudflareCaptchaErrorCloudflareCaptchaProvider)Captcha)JavaScriptInterpreterc                   ~    \ rS rSrS r\S 5       r\S 5       rS rS r	\S 5       r
\S 5       rS	 rS
 rS rS rSrg)
Cloudflare,   c                     Xl         g Ncloudscraper)selfr   s     D/app/mltbenv/lib/python3.13/site-packages/cloudscraper/cloudflare.py__init__Cloudflare.__init__.   s    (    c                     [         R                  S:  aC  [         R                  S:  a  [        R                  " U 5      $ [	        5       R                  U 5      $ [	        5       R                  U 5      $ )N)r   r   r   )sysversion_infohtmlunescaper   )	html_texts    r   r$   Cloudflare.unescape5   sS    v%6)}}Y//<((33|$$Y//r   c                     U R                   R                  SS5      R                  S5      =(       a    U R                  S;   =(       a    [        R
                  " SU R                  [        R                  [        R                  -  5      =(       aA    [        R
                  " SU R                  [        R                  [        R                  -  5      $ ! [         a     gf = f)NServer 
cloudflare)i  i  z/cdn-cgi/images/trace/jsch/5<form .*?="challenge-form" action="/\S+__cf_chl_f_tk=F
headersget
startswithstatus_coderesearchtextMSAttributeErrorresps    r   is_IUAM_ChallengeCloudflare.is_IUAM_ChallengeC   s    	  2.99,G $$
2II<diiPRPTPTU IIPIIDD244K		  		   CC 
C C c                      U R                  U5      =(       aA    [        R                  " SUR                  [        R                  [        R
                  -  5      $ ! [         a     gf = f)NzDcpo.src\s*=\s*['"]/cdn-cgi/challenge-platform/\S+orchestrate/jsch/v1F)r9   r1   r2   r3   r4   r5   r6   r   r8   s     r   is_New_IUAM_Challenge Cloudflare.is_New_IUAM_ChallengeY   s[    
	&&t, II_IIDD244K  		   AA 
A('A(c                      U R                  U5      =(       aA    [        R                  " SUR                  [        R                  [        R
                  -  5      $ ! [         a     gf = f)NzQcpo.src\s*=\s*['"]/cdn-cgi/challenge-platform/\S+orchestrate/(captcha|managed)/v1F)is_Captcha_Challenger1   r2   r3   r4   r5   r6   r=   s     r   is_New_Captcha_Challenge#Cloudflare.is_New_Captcha_Challengel   s[    
	))$/ IIlIIDD244K  		r@   c                     U R                   R                  SS5      R                  S5      =(       a    U R                  S:H  =(       a    [        R
                  " SU R                  [        R                  [        R                  -  5      =(       aA    [        R
                  " SU R                  [        R                  [        R                  -  5      $ ! [         a     gf = f)Nr(   r)   r*     z(/cdn-cgi/images/trace/(captcha|managed)/r+   Fr,   r7   s    r   rB   Cloudflare.is_Captcha_Challenge   s    	  2.99,G $$+III499VXVZVZ]_]a]aVab IIPIIDD244K		  		r;   c                 6    U R                   R                  SS5      R                  S5      =(       aW    U R                  S:H  =(       aA    [        R
                  " SU R                  [        R                  [        R                  -  5      $ ! [         a     gf = f)Nr(   r)   r*   rF   z'<span class="cf-error-code">1020</span>F)
r-   r.   r/   r0   r1   r2   r3   r4   DOTALLr6   r7   s    r   is_Firewall_BlockedCloudflare.is_Firewall_Blocked   s    	  2.99,G $$+II>IIDD299$  		s   BB 
BBc                    U R                  U5      (       a   U R                  R                  [        S5        U R	                  U5      (       a   U R                  R                  [
        S5        U R                  U5      (       a   U R                  R                  [
        S5        U R                  U5      (       d  U R                  U5      (       a'  U R                  R                  (       a  [        S5        gg)Nz9Cloudflare has blocked this request (Code 1020 Detected).zrDetected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.zjDetected a Cloudflare version 2 challenge, This feature is not available in the opensource (free) version.z*Detected a Cloudflare version 1 challenge.TF)rJ   r   simpleExceptionr   rC   r   r>   rB   r9   debugprintr=   s     r   is_Challenge_RequestCloudflare.is_Challenge_Request   s    ##D))--"K
 ((..--( E
 %%d++--(|
 $$T**d.D.DT.J.J  &&BCr   c           
        ^	  [         R                  " SU[         R                  [         R                  -  5      R	                  5       m	[        U	4S jS 5       5      (       d   U R                  R                  [        S5        [        5       n[         R                  " ST	S   [         R                  [         R                  -  5       HS  n[        [         R                  " SU5      5      nUR                  S5      S	;   d  M:  UR                  US   US
   05        MU     [!        U5      n ["        R$                  " U5      R'                  XR(                  5      WS'   UR.                   SUR(                   U R1                  T	S   5       3WS.$ ! [         a#    U R                  R                  [        S5         Nf = f! [*         a8  nU R                  R                  [        S[-        USU5       35         S nANS nAff = f)Nza<form (?P<form>.*?="challenge-form" action="(?P<challengeUUID>.*?__cf_chl_f_tk=\S+)"(.*?)</form>)c              3   ,   >#    U  H	  oT;   v   M     g 7fr    .0keyformPayloads     r   	<genexpr>5Cloudflare.IUAM_Challenge_Response.<locals>.<genexpr>        O5Nck)5N   formchallengeUUIDzRCloudflare IUAM detected, unfortunately we can't extract the parameters correctly.z^\s*<input\s(.*?)/>r^   z(\S+)="(\S+)"name)rjschl_vcpassvaluejschl_answerz+Unable to parse Cloudflare anti-bots page: message://r_   urldata)r1   r2   r4   rI   	groupdictallr   rM   r   r   findallr5   dictr.   updater6   r	   r   dynamicImportsolveChallengenetloc	Exceptiongetattrschemer$   )
r   bodyri   interpreterpayloadchallengeParaminputPayload
hostParsederX   s
            @r   IUAM_Challenge_Response"Cloudflare.IUAM_Challenge_Response   s   	))4 ryy  ik  O5NOOO!!11'h
 "mG"$**-C[QWEXZ\Z^Z^acaeaeZe"f#BJJ/?$PQ##F+/HHNNL$8,w:O#PQ #g c]
	&;&I&I'nT#4#45 N# !''(J,=,=+>t}}[YhMi?j>kl
 	
%  	--#d	  	--#=gaTU>V=WX 	s0   C9F  F )2F= *F:9F:=
G?.G::G?c                   ^
  [         R                  " SU[         R                  [         R                  -  5      R	                  5       m
[        U
4S jS 5       5      (       d   U R                  R                  [        S5        [        [         R                  " ST
S   5      5      nUS   S:X  a  S	OS
nU R                  R                  (       a`  U R                  R                  U R                  R                  R                  S5      :w  a#  U R                  U R                  R                  S'   U R                  R                   S   U R                  R                  S'   ["        R$                  " UR'                  5       5      R)                  WUWS   U5      n[        SUR                  SS5      4SUS   4SUR                  S5      4SU4/5      nUS
:X  a  UR+                  SU05        [-        U5      n	U	R.                   SU	R0                   U R3                  T
S   5       3US.$ ! [        [        4 a$    U R                  R                  [        S5         GNf = f)Nzi<form (?P<form>.*?="challenge-form" action="(?P<challengeUUID>.*?__cf_chl_captcha_tk__=\S+)"(.*?)</form>)c              3   ,   >#    U  H	  oT;   v   M     g 7fr   rT   rU   s     r   rY   8Cloudflare.captcha_Challenge_Response.<locals>.<genexpr>  r[   r\   r]   zUCloudflare Captcha detected, unfortunately we can't extract the parameters correctly.zM(name="r"\svalue|data-ray|data-sitekey|name="cf_captcha_kind"\svalue)="(.*?)"r^   zname="cf_captcha_kind" valuer1   	reCaptchahCaptchaproxyz
User-Agentzdata-sitekeyra   zname="r" valuer)   cf_captcha_kindidzdata-rayzg-recaptcha-responsezh-captcha-responserg   r_   rh   )r1   r2   r4   rI   rk   rl   r   rM   r   r   rm   r6   KeyErrorproxiescaptchar.   r-   r   rp   lowersolveCaptcharo   r	   ru   rr   r$   )r   providerprovider_paramsrv   ri   rx   captchaTypecaptchaResponsedataPayloadr{   rX   s             @r   captcha_Challenge_Response%Cloudflare.captcha_Challenge_Response   s@   	))Yryy 	
 ik  O5NOOO!!11*k
 "

d'G *11O)PTX)X+^hK $$):):)B)BdFWFWF_F_FcFcdkFl)l15D%%g. 372C2C2K2KL2Y!!,/ "//NN

,N#	
 	 "'++.34(F GH7;;z*+#_5	#
  *$ 4oFGc]
 !''(J,=,=+>t}}[YhMi?j>kl
 	
a ) 	--&g	s   B/H% %0IIc                 H	   U R                  U5      (       Ga  U R                  R                  (       aU  U R                  R                  U R                  R                  " UR
                  R                  UR                  40 UD65      nU R                  U5      (       d  U$ U R                  R                  (       aS  [        U R                  R                  [        5      (       a*  U R                  R                  R                  S5      (       d   U R                  R                  [        S5        U R                  R                  R                  S5      S:X  a  U$ U R                  U R                  R                  R                  S5      U R                  R                  UR                  UR                  5      nOU R                  R                   (       dq   [#        [$        R&                  " SUR                  5      R)                  S5      5      [#        S5      -  n[        U[*        ["        45      (       a  X@R                  l        [2        R4                  " U R                  R                   5        U R7                  UR                  UR                  U R                  R8                  5      nU(       Ga  S n[;        U5      nS	US
'   U" USUS   5      US'   [=        UR                  5      nU" USUR>                   SUR@                   3UR                  S.5      US'   U R                  R
                  " SUS   40 UD6nURB                  S:X  a   U R                  R                  [D        S5        URF                  (       d  U$ [;        U5      nU" USSUR                  05      US'   [=        URH                  S   5      R@                  (       d$  [K        UR                  URH                  S   5      n	OURH                  S   n	U R                  R
                  " UR
                  R                  U	40 UD6$ U R                  R
                  " UR
                  R                  UR                  40 UD6$ ! [,        [.        4 a$    U R                  R                  [0        S5         GN[f = f)Nr   z}Cloudflare Captcha detected, unfortunately you haven't loaded an anti Captcha provider correctly via the 'captcha' parameter.return_responsez submit\(\);\r?\n\s*},\s*([0-9]+)r   i  zCCloudflare IUAM possibility malformed, issue extracing delay value.c                      X   R                  U5        X   $ ! [        [        4 a    0 X'   X   R                  U5        X   s $ f = fr   )ro   r6   r   )objr`   newValues      r   
updateAttr1Cloudflare.Challenge_Response.<locals>.updateAttr  sR    %I$$X.9$&1 % "CII$$X.9$%s    +AAFallow_redirectsrj   r-   rg   )OriginRefererPOSTri   i  z5Invalid challenge answer detected, Cloudflare broken?r   Location)&rB   r   
doubleDowndecodeBrotliperform_requestrequestmethodri   r   
isinstancern   r.   rM   r   r   r3   delayfloatr1   r2   groupintr6   
ValueErrorr   timesleepr}   rw   r   r	   ru   rr   r0   r   is_redirectr-   r
   )
r   r8   kwargs
submit_urlr   r   cloudflare_kwargs	urlParsedchallengeSubmitResponseredirect_locations
             r   Challenge_ResponseCloudflare.Challenge_ResponseJ  s   $$T**   ++((55%%55dll6I6I488^W]^ ,,T22 %%--!$"3"3";";TBB((0044Z@@!!11-=   ((,,Z8<MM 88!!))--j9!!))			J $$**!		? II  %(	
 d$E "%#u6627))/ JJt((../ 55		!!--J % !) 038/0(2!6")f% !*I+5!!*!1!1 2#i6F6F5GH#xx,i( '+&7&7&?&?5!' $'# '22c9!!11(K +66.. %-V$4!/9% 7 ; ;<0!),   7 ? ?
 KLSS(//33/77
C)%
 )@(G(G
(S%((00LL''% (    (()<)<dhhQ&QQA '
3 %%55+]s   A0Q- -0R! R!r   N)__name__
__module____qualname____firstlineno__r   staticmethodr$   r9   r>   rC   rB   rJ   rP   r}   r   r   __static_attributes__rT   r   r   r   r   ,   sz    ) 0 0  *&&  *  (<+
bK
b^Rr   r   )r1   r!   r   copyr   collectionsr   r   ImportErrorr"   r#   html.parserr	   r
   urllib.parse
exceptionsr   r   r   r   r   r   r   r   interpretersr   r   rT   r   r   <module>r      s    
 
   #+%/*   /
|R |R=  +
6!*	+  /../s(   A A8 A5,A54A58B	B	