
    ŞiB                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dl	Zd dl
Zd dlZd dlZd dl
mZmZmZmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dd	l(m)Z) dd
l*m$Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddgZ1ej2        e3gZ4e)r/e15                    d           e45                    e)j2                   d Z6 G d dej7        j8                  Z9d Z: G d dej7        j;                  Z< G d dej7        j=                  Z> G d dej7        j?                  Z@ G d dej7        j?                  ZAd%dZB G d de          ZCd&d!ZDd" ZEe G d# d$ee                      ZFdS )'    )annotationsN)DataHandlerFileHandler
FTPHandlerHTTPCookieProcessorHTTPDefaultErrorHandlerHTTPErrorProcessorUnknownHandler   )InstanceStoreMixinadd_accept_encoding_headercreate_connectioncreate_socks_proxy_socketget_redirect_methodmake_socks_proxy_opts)FeaturesRequestHandlerResponseregister_rh)CertificateVerifyError	HTTPErrorIncompleteRead
ProxyErrorRequestErrorSSLErrorTransportError   )brotli)r   )update_url_query)normalize_urlselect_proxygzipdeflatebrc                d     | |i |}t          |d          rt          |_        |	|df|_        |S )N_create_connectionr   )hasattrr   r&   source_address)
http_classr(   argskwargshcs        ^C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/networking/_urllib.py_create_http_connectionr.   5   sI    	T	$V	$	$Br'(( 2 1!+Q/I    c                       e Zd ZdZd fd	Zed             Zd Zd Zed             Z	ed             Z
ed	             Z fd
Zd ZeZeZ xZS )HTTPHandlera  Handler for HTTP requests and responses.

    This class, when installed with an OpenerDirector, automatically adds
    the standard headers to every HTTP request and handles gzipped, deflated and
    brotli responses from web servers.

    Part of this code was copied from:

    http://techknack.net/python-urllib2-handlers/

    Andrew Rowls, the author of that code, agreed to release it to the
    public domain.
    Nc                V     t                      j        |i | || _        || _        d S N)super__init___source_address_context)selfcontextr(   r*   r+   	__class__s        r-   r5   zHTTPHandler.__init__P   s2    $)&)))-r/   c                d    | }|j                             dd           }|rt          ||          }|S )NYtdl-socks-proxy)headerspopmake_socks_conn_class)basereq
conn_classsocks_proxys       r-   _make_conn_classzHTTPHandler._make_conn_classU   s;    
koo&8$?? 	H.z;GGJr/   c                    |                      t          j        j        |          }|                     t          j        t          || j                  |          S r3   )	rD   httpclientHTTPConnectiondo_open	functoolspartialr.   r6   r8   rA   rB   s      r-   	http_openzHTTPHandler.http_open]   sS    **4;+EsKK
||I-#Z1EG GHKM M 	Mr/   c                    |                      t          j        j        |          }|                     t          j        t          || j                  || j	                  S )N)r9   )
rD   rF   rG   HTTPSConnectionrI   rJ   rK   r.   r6   r7   rL   s      r-   
https_openzHTTPHandler.https_openb   sZ    **4;+FLL
||'T5IK K  ( ( 	(r/   c                    | s| S 	 t          j        | t           j                   S # t           j        $ r t          j        |           cY S w xY wr3   )zlib
decompress	MAX_WBITSerrordatas    r-   r#   zHTTPHandler.deflatei   s]     	K	)?4$.999z 	) 	) 	)?4(((((	)s   & #AAc                2    | s| S t          j        |           S r3   )r   rS   rV   s    r-   r   zHTTPHandler.brotlir   s      	K &&&r/   c                P    | s| S t          j        | t           j        dz            S )N   )wbits)rR   rS   rT   rV   s    r-   gzzHTTPHandler.gzx   s-      	Kt4>B+>????r/   c                    |                                 }t          |          }||k    rt          ||          }t                                          |          S )N)url)get_full_urlr    update_Requestr4   do_request_)r8   rA   r^   url_escapedr:   s       r-   http_requestzHTTPHandler.http_request   sZ       #C(( + +666Cww""3'''r/   c                j   |}d }d t          |j                            dd                              d                    D             D ]}|dk    r*|                     |p|                                          }2|dk    r*|                     |p|                                          }b|dk    r0t          r)|                     |p|                                          }|Ot          j	        
                    t          j        |          |j        |j        |j                  }|j        |_        d|j        cxk    rd	k     rmn nj|j                            d
          }|rN|                    d                                          }t%          |          }||k    r|j        d
= ||j        d
<   |S )Nc              3  >   K   | ]}|                                 V  d S r3   )strip).0es     r-   	<genexpr>z,HTTPHandler.http_response.<locals>.<genexpr>   s*      jjqjjjjjjr/   zContent-encoding ,r"   r#   r$   i,  i  Locationz
iso-8859-1)reversedr=   getsplitr\   readr#   r   urllibrequest
addinfourlioBytesIOr^   codemsgencodedecoder    )r8   rA   respold_respdecoded_responseencodinglocationlocation_escapeds           r-   http_responsezHTTPHandler.http_response   s   
  jjHT\5E5EFXZ\5]5]5c5cdg5h5h,i,ijjj 	P 	PH6!!#'77+;+Jtyy{{#K#K  Y&&#'<<0@0ODIIKK#P#P  T!!f!#';;/?/N499;;#O#O '>,,RZ8H-I-I8K[]e]ikskxyyD|DH $)!!!!c!!!!!|''
33H @#??<88??AA#0#:#: ///Z0/?DL,r/   )NN)__name__
__module____qualname____doc__r5   staticmethodrD   rM   rP   r#   r   r\   rc   r   https_requesthttps_response__classcell__r:   s   @r-   r1   r1   A   s                    
   \M M M
( ( ( ) ) \) ' ' \'
 @ @ \@( ( ( ( ($  > !M"NNNNNr/   r1   c                    t          | t          j        j        t          j        j        f          sJ t          |           G fdd|           }|S )Nc                      e Zd ZeZ fdZdS ).make_socks_conn_class.<locals>.SocksConnectionc           
     J   t          d         d         f| j        | j        t          j        t
          | j        | j        f                    | _        t          | t          j        j                  r-| j                            | j        | j                  | _        d S d S )Naddrport)timeoutr(   _create_socket_func)server_hostname)r   r   r(   rJ   rK   r   hostr   sock
isinstancerF   rG   rO   r7   wrap_socket)r8   
proxy_argss    r-   connectz6make_socks_conn_class.<locals>.SocksConnection.connect   s    )F#Z%78#2$-$5-	49/Ez%S %S	T T TDI $ ;<< \ M55diQUQZ5[[			\ \r/   N)r   r   r   r   r&   r   )r   s   r-   SocksConnectionr      s;        .	\ 	\ 	\ 	\ 	\ 	\ 	\r/   r   )
issubclassrF   rG   rH   rO   r   )
base_classrC   r   r   s      @r-   r?   r?      s    j"DK$?#A B B B B B '{33J\ \ \ \ \ \ \* \ \ \ r/   c                  F    e Zd ZdZej        j        j        xZxZ	xZ
Zd ZdS )RedirectHandlera  YoutubeDL redirect handler

    The code is based on HTTPRedirectHandler implementation from CPython [1].

    This redirect handler fixes and improves the logic to better align with RFC7261
     and what browsers tend to do [2][3]

    1. https://github.com/python/cpython/blob/master/Lib/urllib/request.py
    2. https://datatracker.ietf.org/doc/html/rfc7231
    3. https://github.com/python/cpython/issues/91306
    c                  
 |dvr(t           j                            |j        ||||          |j        }dg
t          |                                |          }||                                k    rd }
                    ddg           
fd|j        	                                D             }	t           j
                            ||	|j        d||          S )N)i-  i.  i/  i3  i4  CookiezContent-LengthzContent-Typec                H    i | ]\  }}|                                 v||S  )title)rg   kvremove_headerss      r-   
<dictcomp>z4RedirectHandler.redirect_request.<locals>.<dictcomp>   s2    ___1qwwyyP^?^?^q!?^?^?^r/   T)r=   origin_req_hostunverifiablemethodrW   )rq   rU   r   full_urlrW   r   
get_methodextendr=   itemsrr   Requestr   )r8   rA   fprv   rw   r=   newurlnew_data
new_methodnew_headersr   s             @r-   redirect_requestz RedirectHandler.redirect_request   s    000,((tS'2NNN8
 #()9)94@@
))))H!!#3^"DEEE____(9(9(;(;___~%%K9Ljx & A A 	Ar/   N)r   r   r   r   rq   rr   HTTPRedirectHandlerhttp_error_302http_error_301http_error_303http_error_307http_error_308r   r   r/   r-   r   r      sR        
 
 IOHjHyyNy^yn~A A A A Ar/   r   c                       e Zd ZdZddZd ZdS )ProxyHandlerd   Nc                V    || _         dD ]}t          | | d| j        fd           d S )N)rF   httpsftp_openc                     ||           S r3   r   )rmeths     r-   <lambda>z'ProxyHandler.__init__.<locals>.<lambda>   s    DDQRGG r/   )proxiessetattr
proxy_open)r8   r   schemes      r-   r5   zProxyHandler.__init__   sO    . 	U 	UFDV***4?,S,S,STTTT	U 	Ur/   c                F   t          |                                | j                  }|d S t          j                            |          j                                        dv r|                    d|           d S t          j	        j
                            | ||d           S )N)socks4socks4asocks5socks5hr<   )r!   r_   r   rq   parseurlparser   lower
add_headerrr   r   r   )r8   rA   proxys      r-   r   zProxyHandler.proxy_open   s    S--//>>=F<  ''.4466:dddNN-u5554~*55#ud$ $ 	$r/   r3   )r   r   r   handler_orderr5   r   r   r/   r-   r   r      s@        MU U U U	$ 	$ 	$ 	$ 	$r/   r   c                      e Zd Zd ZdS )
PUTRequestc                    dS )NPUTr   r8   s    r-   r   zPUTRequest.get_method  s    ur/   Nr   r   r   r   r   r/   r-   r   r     s#            r/   r   c                      e Zd Zd ZdS )HEADRequestc                    dS )NHEADr   r   s    r-   r   zHEADRequest.get_method  s    vr/   Nr   r   r/   r-   r   r     s#            r/   r   c                   | j                                         }|                    |pi            ||n| j        }t	          |p|                                 |          }|                                 }|dk    rt          }	n|dk    rt          }	nt          j
        j        }	 |	|||| j        | j                  }
t          | d          r| j        |
_        |
S )Nr   r   )rW   r=   r   r   r   )r=   copyupdaterW   r   r_   r   r   r   rq   rr   r   r   r   r'   r   )rA   r^   rW   r=   queryreq_headersreq_datareq_urlreq_get_methodreq_typenew_reqs              r-   r`   r`     s    +""$$Kw}"%%%'ttSXHs8c&6&6&8&8%@@G^^%%N	5	 	 >)hh+#:JL L LG sI &+Nr/   c                  ,     e Zd ZdZd fdZddZ xZS )	UrllibResponseAdapterzX
    HTTP Response adapter class for urllib addinfourl and http.client.HTTPResponse
    res5http.client.HTTPResponse | urllib.response.addinfourlc                    t                                          ||j        |j        t	          |dd           p|                                t	          |dd                      d S )Nstatusreason)r   r=   r^   r   r   )r4   r5   r=   r^   getattrgetcode)r8   r   r:   s     r-   r5   zUrllibResponseAdapter.__init__*  sm    
 	CKSW3$//@3;;==QTV^`dIeIe 	 	g 	g 	g 	g 	gr/   Nc                   | j         rdS 	 | j                            |          }t          | j        dd           }t	          | j        t
          j        j                  r||                                  nt	          | j        t          j
        j                  r|t	          |t          j                  rL|                                t          |                                          k    r|                                  nNt	          |t          j                  r||                                  n||j         r|                                  |S # t$          $ r}t'          |           |d }~ww xY w)Nr/   r   )closedr   rp   r   r   rF   rG   HTTPResponsecloserq   responsers   rt   ru   telllen	getbufferBufferedReader	Exceptionhandle_response_read_exceptions)r8   amtrW   
underlyingrh   s        r-   rp   zUrllibResponseAdapter.read3  sM   ; 	3	7<<$$D $55J$'4;#;<< AS

DGV_%?@@ ZE[j"*55 !!((C
0D0D0F0F,G,GGG


B,=>> !3; JJLLL'J,='

K 	 	 	+A...G	s   EE 
E2E--E2)r   r   r3   )r   r   r   r   r5   rp   r   r   s   @r-   r   r   %  sa         g g g g g g       r/   r   rh   ssl.SSLErrorc                    t          | t          j                  sd S t          | t          j                  rt	          |           | t          |           | )Ncause)r   sslr   SSLCertVerificationErrorr   rh   s    r-   handle_sslerrorr  O  sV    a&& !S122 5$1---14



"r/   c                x   t          | t          j        j                  r*t          t	          | j                  | | j                  | t          | t          j                  rt          |            d S t          | t          t          t          j        j        gt          R           rt          |           | d S )N)rK   r  expectedr  )r   rF   rG   r   r   rK   r  r  r   r  OSErrorEOFErrorHTTPExceptionCONTENT_DECODE_ERRORSr   r  s    r-   r   r   W  s    !T[/00 -S^^1qzRRRXYY	As|	$	$ -	A4;+D]G\]]	^	^ -1%%%1,- -r/   c                  l     e Zd ZdZdZej        ej        fZdZ	ddd fdZ
 fd	ZddZd Zd Z xZS )UrllibRH)rF   r   rW   r   )rF   r   r   r   r   rq   F)enable_file_urlsr  boolc               |     t                      j        di | || _        | j        rg | j        dR | _        d S d S )Nfiler   )r4   r5   r  _SUPPORTED_URL_SCHEMES)r8   r  r+   r:   s      r-   r5   zUrllibRH.__init__h  s^    ""6""" 0  	Q*PD,G*P*P*PD'''	Q 	Qr/   c                    t                                          |           |                    dd            |                    dd            |                    dd            d S )N	cookiejarr   
legacy_ssl)r4   _check_extensionsr>   )r8   
extensionsr:   s     r-   r  zUrllibRH._check_extensionsn  s]    !!*---{D)))y$'''|T*****r/   Nc           
     >   t           j                                        }t          |          t	          t          t          | j                            |                     |          | j	                  t          |          t                      t                      t                      t                      t                      t!                      g	}| j        r!|                    t'                                 |D ]}|                    |           g |_        |S )N)legacy_ssl_support)
debuglevelr9   r(   )rq   rr   OpenerDirectorr   r1   intr  verbose_make_sslcontextr(   r   r   r
   r   r   r	   r   r  appendr   add_handler
addheaders)r8   r   r  r  openerhandlershandlers          r-   _create_instancezUrllibRH._create_instancet  s    ..00!!tDL1122--AS-TT#24 4 4  	**MM#%%LL  
   	+OOKMM*** 	( 	(Gw''''
 r/   c                0    t          |t                     d S r3   )r   SUPPORTED_ENCODINGS)r8   _r=   s      r-   _prepare_headerszUrllibRH._prepare_headers  s    "7,?@@@@@r/   c                |   |                      |          }t          j                            |j        |j        ||j                  }|                     |                     |          | 	                    |          |j
                            d                    }	 |                    ||                     |                    }nd# t          j        j        $ rz}t!          |j        t$          j        j        t          j        j        f          r?d|j        _        t          t3          |j                  dt5          |          v           | d }~wt          j        j        $ ru}|j        }dt5          |                                          v st!          |t<                    rt?          |	          |tA          |           tC          |	          |d }~wt$          j        j"        tF          f$ r}tI          |	          |d }~wtJ          $ r}tA          |            d }~ww xY wt3          |          S )
N)r^   rW   r=   r   r  )r   r  r  )r   Tzredirect error)redirect_loopztunnel connection failedr  )&_get_headersrq   rr   r   r^   rW   r   _get_instance_get_proxies_get_cookiejarr  rn   open_calculate_timeoutrU   r   r   r   rF   rG   r   r   rs   _closerclose_calledr   strURLErrorr   r   SocksProxyErrorr   r   r   
InvalidURL
ValueErrorr   r   )r8   rr   r=   
urllib_reqr#  r   rh   r  s           r-   _sendzUrllibRH._send  s6   ##G,,^++>	 , 
 

 ##%%g..))'22&155lCC $ 
 

	++j$2I2I'2R2R+SSCC|% 	 	 	!$!96?;U VWW n)-	& 5ad ; ;K[_bcd_e_eKeffflmm|$ 	1 	1 	1HE *SZZ-=-=-?-???:eUdCeCe? q)))q0+E222 q)))q0&
3 	/ 	/ 	/
 Q'''Q. 	 	 	+A...	 %S)))s>   *C H,A5EH,+A0GH,9H

H,H''H,)r  r  r3   )r   r   r   r  _SUPPORTED_PROXY_SCHEMESr   NO_PROXY	ALL_PROXY_SUPPORTED_FEATURESRH_NAMEr5   r  r&  r*  r;  r   r   s   @r-   r  r  a  s        =Q#,h.@AG38 Q Q Q Q Q Q Q Q+ + + + +   :A A A)* )* )* )* )* )* )*r/   r  )NNNN)rh   r   )G
__future__r   rJ   http.clientrF   rt   r  urllib.errorrq   urllib.parseurllib.requesturllib.responserR   r   r   r   r   r   r	   r
   _helperr   r   r   r   r   r   commonr   r   r   r   
exceptionsr   r   r   r   r   r   r   dependenciesr   socksr7  utilsr   utils.networkingr    r!   r(  rU   r	  r  r   r.   rr   AbstractHTTPHandlerr1   r?   r   r   BaseHandlerr   r   r   r   r`   r   r  r   r  r   r/   r-   <module>rP     s	   " " " " " "         				 



                                                  D C C C C C C C C C C C                  " ! ! ! ! ! 1 1 1 1 1 1 $ $ $ $ $ $ : : : : : : : :y) W- 	 /t$$$  ...	 	 	q# q# q# q# q#&.4 q# q# q#h  ,$A $A $A $A $Afn8 $A $A $AN$ $ $ $ $6>- $ $ $*    '   
    &.(   
   (' ' ' ' 'H ' ' 'T# # # #- - - [* [* [* [* [*~1 [* [* [* [* [*r/   