U
    g                     @   s   d dl Z d dlZd dlZd dlZddlmZ dd ZG dd de je	Z
e
e dd	d
dZe	e
dddZe
dddZdd Zdd Zdd ZdS )    N   )remove_startc                  C   s   d} d}| t | S )NzhMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36)&z90.0.4430.212z90.0.4430.24z90.0.4430.70z90.0.4430.72z90.0.4430.85z90.0.4430.93z91.0.4472.101z91.0.4472.106z91.0.4472.114z91.0.4472.124z91.0.4472.164z91.0.4472.19z91.0.4472.77z92.0.4515.107z92.0.4515.115z92.0.4515.131z92.0.4515.159z92.0.4515.43z93.0.4556.0z93.0.4577.15z93.0.4577.63z93.0.4577.82z94.0.4606.41z94.0.4606.54z94.0.4606.61z94.0.4606.71z94.0.4606.81z94.0.4606.85z95.0.4638.17z95.0.4638.50z95.0.4638.54z95.0.4638.69z95.0.4638.74z96.0.4664.18z96.0.4664.45z96.0.4664.55z96.0.4664.93z97.0.4692.20)randomchoice)Z_USER_AGENT_TPLZ_CHROME_VERSIONS r   ;/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/utils/networking.pyrandom_user_agent	   s    (r   c                       sP   e Zd ZdZ fddZ fddZ fddZ fdd	Z fd
dZ  Z	S )HTTPHeaderDictz
    Store and access keys case-insensitively.
    The constructor can take multiple dicts, in which keys in the latter are prioritised.
    c                    s4   t    |D ]}|d k	r| | q| | d S N)super__init__update)selfargskwargsdct	__class__r   r   r   <   s
    
zHTTPHeaderDict.__init__c                    s2   t |tr|d}t | t|  d S )Nzlatin-1)
isinstancebytesdecoder   __setitem__titlestrstrip)r   keyvaluer   r   r   r   C   s    

zHTTPHeaderDict.__setitem__c                    s   t  | S r
   )r   __getitem__r   r   r   r   r   r   r   H   s    zHTTPHeaderDict.__getitem__c                    s   t  |  d S r
   )r   __delitem__r   r   r   r   r   r   K   s    zHTTPHeaderDict.__delitem__c                    s   t  t|tr| n|S r
   )r   __contains__r   r   r   r   r   r   r   r    N   s    zHTTPHeaderDict.__contains__)
__name__
__module____qualname____doc__r   r   r   r   r    __classcell__r   r   r   r   r	   6   s   r	   z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zen-us,en;q=0.5Znavigate)z
User-AgentAcceptzAccept-LanguagezSec-Fetch-Mode)proxiesheadersc              	   C   s   | dd }|r |   || d< |  D ]\}}|dkrBd | |< q(|dkrLq(|d k	r(ztj|d }W n tk
r   Y q(Y nX |d krdt|d | |< dd	d
}||kr(tj	tj
|j|| d| |< q(d S )NzYtdl-Request-ProxyallZ__noproxy__nor   zhttp://z//Zsocks5hZsocks4)Zsocks5socks)scheme)popclearitemsurllibrequest_parse_proxy
ValueErrorr   parse
urlunparseurlparse_replace)r'   r(   Z	req_proxy	proxy_key	proxy_urlproxy_schemeZreplace_schemer   r   r   clean_proxiesZ   s0    
r;   r(   c                 C   s&   d| kr| d= d| d< |  dd  d S )NzYoutubedl-No-CompressionidentityzAccept-EncodingzYtdl-socks-proxy)r-   r<   r   r   r   clean_headersz   s    r>   c                 C   s   g }|  d}|D ]0}|dkr"qq|dkr8|rB|  q|| q|d sd|rX|d rd|dd |d dkrz|d d|S )N/...r    )r@   rA   )splitr-   appendinsertjoin)pathoutputsegmentssr   r   r   remove_dot_segments   s    


rL   c                 C   s   t j| dS )z4Escape non-ASCII characters as suggested by RFC 3986s   %/;:@&=+$,!~*'()?#[])r0   r4   quote)rK   r   r   r   escape_rfc3986   s    rN   c                 C   sN   t j| }|j|jddtt|j	t|j
t|jt|jd S )z&Normalize URL as suggested by RFC 3986idnaascii)netlocrH   paramsqueryfragment)r0   r4   r6   r7   rQ   encoder   rN   rL   rH   rR   rS   rT   geturl)urlZ
url_parsedr   r   r   normalize_url   s    rX   )collectionsr   urllib.parser0   urllib.request_utilsr   r   UserDictdictr	   Zstd_headersr;   r>   rL   rN   rX   r   r   r   r   <module>   s"   - 