
    !h%                        S SK Jr  S SKrS SKJr  S SKJrJr  S SKJ	r	J
r
Jr  S SKJr  S SKJr  S SKJr  \(       a  S S	KJr  S S
KJrJr  S SKJr  S SKJr   " S S5      rg)    )annotationsN)TYPE_CHECKING)unquote
urlunparse)_parse_proxy
getproxiesproxy_bypass)NotConfigured)urlparse_cached)to_bytes)Self)RequestSpider)Crawler)Responsec                  ~    \ rS rSrS
SS jjr\SS j5       rSS jrSS jr      SS jr	          SS jr
Srg	)HttpProxyMiddleware   c                    Xl         0 U l        [        5       R                  5        H$  u  p# U R	                  X25      U R                  U'   M&     g ! [
         a     M6  f = f)N)auth_encodingproxiesr   items
_get_proxy
ValueError)selfr   type_urls       m/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/downloadermiddlewares/httpproxy.py__init__HttpProxyMiddleware.__init__   sV    )6<>$,,,.JE&*ooc&AU# /
  s   A
AAc                    UR                   R                  S5      (       d  [        eUR                   R                  S5      nU " U5      $ )NHTTPPROXY_ENABLEDHTTPPROXY_AUTH_ENCODING)settingsgetboolr
   get)clscrawlerr   s      r   from_crawler HttpProxyMiddleware.from_crawler%   sB    ''(;<<$+$4$4$8$89R$S=!!    c                    [        [        U5       S[        U5       3U R                  S9n[        R                  " U5      $ )N:)encoding)r   r   r   base64	b64encode)r   usernamepassword	user_passs       r   _basic_auth_header&HttpProxyMiddleware._basic_auth_header,   sA    x !78#4"56ASAS
	 	**r+   c                    [        U5      u  p4pV[        U=(       d    UUSSSS45      nU(       a  U R                  XE5      OS nX4$ )N )r   r   r4   )	r   r   	orig_type
proxy_typeuserr2   hostport	proxy_urlcredss	            r   r   HttpProxyMiddleware._get_proxy2   sJ    /;C/@,
(
 7i2r2rRS	;?''7Tr+   c                   Su  p4nSUR                   ;   a2  UR                   S   b!  U R                  UR                   S   S5      u  p4O{U R                  (       aj  [        U5      nUR                  nUS;  d+  UR
                  (       a<  [        UR
                  5      (       d"  XpR                  ;   a  UnU R                  U   u  p4U R                  XX55        g )N)NNNproxyr7   )httphttps)metar   r   r   schemehostnamer	   _set_proxy_and_creds)r   requestspiderr=   r<   rD   parsed_schemes           r   process_request#HttpProxyMiddleware.process_request:   s     $4 &gll"||G$0#'??7<<3H"#M \\$W-FmmG 00OOL,I,I\\) #'<<#7 !!'eDr+   c                   U(       a  SUR                   S'   U(       a  X!R                   S'   O+UR                   R                  S5      b  S UR                   S'   U(       a!  SU-   UR                  S'   X!R                   S'   g SUR                   ;   a>  X!R                   S   :w  a+  SUR                  ;   a  UR                  S	 UR                   S	 g g SUR                  ;   a$  U(       a  X!R                   S'   g UR                  S	 g g )NT_scheme_proxyr@   s   Basic s   Proxy-Authorization_auth_proxy)rC   r&   headers)r   rG   r<   r=   rD   s        r   rF   (HttpProxyMiddleware._set_proxy_and_credsO   s     ,0GLL)$-LL!\\g&2$(GLL!6?%6GGOO23*3LL'gll*LL77)W__<(>?LL/ 8 $w6.7]+OO$:;	 7r+   )r   r   N)zlatin-1)r   
str | None)r(   r   returnr   )r1   strr2   rT   rS   bytes)r   rT   r8   rT   rS   ztuple[bytes | None, str])rG   r   rH   r   rS   zRequest | Response | None)
rG   r   r<   rR   r=   zbytes | NonerD   rR   rS   None)__name__
__module____qualname____firstlineno__r   classmethodr)   r4   r   rK   rF   __static_attributes__ r+   r   r   r      sw    	 " "+ (.	"*<< < 	<
 < 
<r+   r   )
__future__r   r/   typingr   urllib.parser   r   urllib.requestr   r   r	   scrapy.exceptionsr
   scrapy.utils.httpobjr   scrapy.utils.pythonr   typing_extensionsr   scrapyr   r   scrapy.crawlerr   scrapy.httpr   r   r]   r+   r   <module>ri      sA    "    ,  , 0 (&&&$O< O<r+   