
    3 dX                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ  e j        e          Z ed	
          Zd Z G d d          ZdS )    N)defaultdict)
TLDExtract)NotConfigured)Response)	CookieJar)urlparse_cached
to_unicodeT)include_psl_private_domainsc                 0    t          |           }|j         S N)_split_domaindomain)r   partss     Dlib/python3.11/site-packages/scrapy/downloadermiddlewares/cookies.py_is_public_domainr      s    &!!E|    c                   Z    e Zd ZdZddZed             Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )CookiesMiddlewarez<This middleware enables working with sites that need cookiesFc                 F    t          t                    | _        || _        d S r   )r   r   jarsdebug)selfr   s     r   __init__zCookiesMiddleware.__init__   s    	**	


r   c                     |j                             d          st           | |j                             d                    S )NCOOKIES_ENABLEDCOOKIES_DEBUG)settingsgetboolr   )clscrawlers     r   from_crawlerzCookiesMiddleware.from_crawler   sC    ''(9:: 	 s7#++O<<===r   c                   |D ]}|j         }|                    d          r
|dd          }t          |          j                                        }|rt          |          r||k    rf||_         |                    ||           d S )N.   )r   
startswithr   hostnamelowerr   set_cookie_if_ok)r   cookiesjarrequestcookiecookie_domainrequest_domains          r   _process_cookiesz"CookiesMiddleware._process_cookies$   s     	2 	2F"MM'',, 2 -abb 1,W55>DDFFN /!2=!A!A / N2  .  1111	2 	2r   c                 v   |j                             dd          rd S |j                             d          }| j        |         }|                     ||          }|                     |||           |j                            dd            |                    |           |                     ||           d S )Ndont_merge_cookiesF	cookiejarr+   r,   Cookie)	metagetr   _get_request_cookiesr0   headerspopadd_cookie_header_debug_cookie)r   r,   spidercookiejarkeyr+   r*   s         r   process_requestz!CookiesMiddleware.process_request3   s    <0%88 	F|''44i%++C99g3@@@ 	Hd+++g&&&7F+++++r   c                    |j                             dd          r|S |j                             d          }| j        |         }|                    ||          }|                     |||           |                     ||           |S )Nr2   Fr3   r4   )r6   r7   r   make_cookiesr0   _debug_set_cookie)r   r,   responser=   r>   r+   r*   s          r   process_responsez"CookiesMiddleware.process_responseA   s    <0%88 	O |''44i%""8W55g3@@@x000r   c                     | j         rmd |j                            d          D             }|rId                    d |D                       }d| d| }t                               |d|i           d S d S d S )Nc                 0    g | ]}t          |d           S replaceerrorsr	   .0cs     r   
<listcomp>z3CookiesMiddleware._debug_cookie.<locals>.<listcomp>Q   5        1Y///  r   r5   
c              3   "   K   | ]
}d | dV  dS )zCookie: rP   N rK   s     r   	<genexpr>z2CookiesMiddleware._debug_cookie.<locals>.<genexpr>V   s.      #A#A$4q$4$4$4#A#A#A#A#A#Ar   zSending cookies to: r=   extrar   r9   getlistjoinlogger)r   r,   r=   clr*   msgs         r   r<   zCookiesMiddleware._debug_cookieO   s    : 	<  00::  B  <))#A#Ab#A#A#AAAAWAAAAS6(:;;;;;	< 	<
< <r   c                     | j         rmd |j                            d          D             }|rId                    d |D                       }d| d| }t                               |d|i           d S d S d S )Nc                 0    g | ]}t          |d           S rG   r	   rK   s     r   rN   z7CookiesMiddleware._debug_set_cookie.<locals>.<listcomp>\   rO   r   
Set-CookierP   c              3   "   K   | ]
}d | dV  dS )zSet-Cookie: rP   NrR   rK   s     r   rS   z6CookiesMiddleware._debug_set_cookie.<locals>.<genexpr>a   s.      #E#EQ$81$8$8$8#E#E#E#E#E#Er   zReceived cookies from: r=   rT   rV   )r   rC   r=   rZ   r*   r[   s         r   rB   z#CookiesMiddleware._debug_set_cookieZ   s    : 	< !)11,??  B  <))#E#E"#E#E#EEEEEEGEES6(:;;;;;	< 	<
< <r   c                    i }dD ]}|                     |          .|dv r)d| d| d| d}t                              |            dS Et          ||         t          t
          t          t          f          rt          ||                   ||<   	 ||                             d          ||<   # t          $ r? t                              d	||           ||                             d
d          ||<   Y w xY w|
                    d           d|
                    d           }|                                D ]"\  }}|d|                                 d| z  }#|S )z
        Given a dict consisting of cookie components, return its string representation.
        Decode from bytes if necessary.
        )namevaluepathr   Nra   rb   z Invalid cookie found in request z: z ('z' is missing)utf8z0Non UTF-8 encoded cookie found in request %s: %slatin1rH   rI   ra   =rb   z; )r7   rY   warning
isinstanceboolfloatintstrdecodeUnicodeDecodeErrorr:   items
capitalize)r   r-   r,   decodedkeyr[   
cookie_strrb   s           r   _format_cookiez CookiesMiddleware._format_cookiee   s   
 6 	R 	RCzz# ++ eWeeeeSVeeeCNN3'''FF&+eS#'>?? R"6#;//R#)#;#5#5f#=#=GCLL) R R RNNJ  
 $*#;#5#5hy#5#Q#QGCLLLR  F++DDgkk'.B.BDD
!--// 	: 	:JC9s~~//99%999JJs   B11AC:9C:c                 8    j         sg S t          j         t                    r$d j                                         D             }nj         }t	          d fd|D                       }t          j        d|i          }|                    |          S )zD
        Extract cookies from the Request.cookies attribute
        c              3   &   K   | ]\  }}||d V  dS )rd   NrR   )rL   kvs      r   rS   z9CookiesMiddleware._get_request_cookies.<locals>.<genexpr>   s.      SS41aA..SSSSSSr   Nc              3   D   K   | ]}                     |          V  d S r   )ru   )rL   rM   r,   r   s     r   rS   z9CookiesMiddleware._get_request_cookies.<locals>.<genexpr>   s3      !S!Sa$"5"5a"A"A!S!S!S!S!S!Sr   r^   )r9   )r*   ri   dictrp   filterr   urlrA   )r   r+   r,   r*   	formattedrC   s   ` `   r   r8   z&CookiesMiddleware._get_request_cookies   s      	Igot,, 	&SS7?;P;P;R;RSSSGGoG4!S!S!S!S!S7!S!S!STT	GK,	1JKKK'222r   N)F)__name__
__module____qualname____doc__r   classmethodr"   r0   r?   rD   r<   rB   ru   r8   rR   r   r   r   r      s        FF    > > [>
2 2 2, , ,  	< 	< 	<	< 	< 	<  >3 3 3 3 3r   r   )loggingcollectionsr   
tldextractr   scrapy.exceptionsr   scrapy.httpr   scrapy.http.cookiesr   scrapy.utils.httpobjr   scrapy.utils.pythonr
   	getLoggerr   rY   r   r   r   rR   r   r   <module>r      s     # # # # # # ! ! ! ! ! ! + + + + + +             ) ) ) ) ) ) 0 0 0 0 0 0 * * * * * *		8	$	$ 
t<<<  
y3 y3 y3 y3 y3 y3 y3 y3 y3 y3r   