3 �L�j~��)@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+y ddl,Z,Wne-k �r"dZ.YnXdZ.ddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'g!Z/d(e j0dd)�Z1da2de j3fddddd*�d+d�Z4d,d�Z5gZ6d}d-d$�Z7d.d%�Z8e j9d/e j:�Z;d0d1�Zd4d �Z?Gd5d �d �Z@Gd6d�de@�ZAGd7d �d e@�ZBGd8d �d e@�ZCd9d:�ZDGd;d �d e@�ZEGdd�deG�ZHGd?d�d�ZIGd@d�deIe@�ZJGdAd�deIe@�ZKejLZMGdBd�d�ZNGdCd�de@eN�ZOGdDd�de@eN�ZPGdEdF�dFe@�ZQGdGd�deQ�ZReSejTdH��r.GdIdJ�dJeQ�ZUe/jVdJ�GdKd �d e@�ZWGdLd�de@�ZXdMdN�ZYdOdP�ZZGdQd�de@�Z[dRdS�Z\GdTd�de@�Z]GdUd�de]�Z^GdVd�de@�Z_dWZ`ejadXk�r�ddYlbmcZcmdZdndZd"�Zcd[d!�ZdiZeGd\d&�d&�ZfGd]d'�d'ef�Zgdahd^d_�Zidajd`da�Zkdaldbdc�Zmdanddde�ZoGdfdg�dg�Zpdhdi�Zqd~djdk�Zrdldm�Zse jtdnk�r�ddolumvZvmwZwdpdq�Zxdrds�Zydtdu�Zzdvd#�Z{n6ejadXk�r�dwdx�Z|dyd#�Z{dzd{�Z}d|du�ZzneqZ{erZzdS)�N)�URLError� HTTPError�ContentTooShortError)�urlparse�urlsplit�urljoin�unwrap�quote�unquote� splittype� splithost� splitport� splituser� splitpasswd� splitattr� splitquery� splitvalue�splittag�to_bytes�unquote_to_bytes� urlunparse)� addinfourl� addclosehookFT�Request�OpenerDirector� BaseHandler�HTTPDefaultErrorHandler�HTTPRedirectHandler�HTTPCookieProcessor� ProxyHandler�HTTPPasswordMgr�HTTPPasswordMgrWithDefaultRealm�HTTPPasswordMgrWithPriorAuth�AbstractBasicAuthHandler�HTTPBasicAuthHandler�ProxyBasicAuthHandler�AbstractDigestAuthHandler�HTTPDigestAuthHandler�ProxyDigestAuthHandler� HTTPHandler� FileHandler� FTPHandler�CacheFTPHandler� DataHandler�UnknownHandler�HTTPErrorProcessor�urlopen�install_opener� build_opener� pathname2url� url2pathname� getproxies� urlretrieve� urlcleanup� URLopener�FancyURLopenerz%d.%d�)�cafile�capath� cadefault�contextc Cs�|s |s |rfddl}|jdtd�|dk r2td��ts>td��tjtjj||d�}t |d�}t |�} n0|r~t |d�}t |�} nt dkr�t �a } nt } | j |||�S)NrzJcafile, capath and cadefault are deprecated, use a custom context instead.r:zDYou can't pass both context and any of cafile, capath, and cadefaultzSSL support not available)r;r<)r>) �warnings�warn�DeprecationWarning� ValueError� _have_ssl�sslZcreate_default_contextZPurposeZ SERVER_AUTH� HTTPSHandlerr2�_opener�open) �url�data�timeoutr;r<r=r>r?Z https_handler�opener�rL�&/usr/lib64/python3.6/urllib/request.pyr0�s*<       cCs|adS)N)rF)rKrLrLrMr1�scCs4t|�\}}tjt||����}|j�}|dkrD| rDtjj|�|fS|rTt|d�}nt j dd�}|j }t j |�|��||f} d } d } d} d} d |kr�t|d �} |r�|| | | �xB|j| �}|s�P| t|�7} |j|�| d7} |r�|| | | �q�WWdQRXWdQRX| dk�r0| | k�r0td | | f| ��| S)N�file�wbF)�deletei��rzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi �����)r � contextlib�closingr0�info�os�path�normpathrG�tempfileZNamedTemporaryFile�name�_url_tempfiles�append�int�read�len�writer)rH�filename� reporthookrIZurl_typerX�fp�headers�tfp�result�bs�sizer_�blocknum�blockrLrLrMr6�sD         $c CsHx0tD](}ytj|�Wqtk r,YqXqWtdd�=trDdadS)N)r\rW�unlink�OSErrorrF)Z temp_filerLrLrMr7%s   z:\d+$cCs<|j}t|�d}|dkr&|jdd�}tjd|d�}|j�S)NrR��Host)�full_urlr� get_header� _cut_port_re�sub�lower)�requestrH�hostrLrLrM� request_host4s   rwc@s�eZdZdidddfdd�Zedd��Zejdd��Zejdd��Zed d ��Zejd d ��Zejd d ��Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zd#dd�Zdd �Zd!d"�ZdS)$rNFc Csp||_i|_i|_d|_||_d|_x |j�D]\}}|j||�q.W|dkrVt|�}||_ ||_ |rl||_ dS)N) rpre�unredirected_hdrs�_datarI� _tunnel_host�items� add_headerrw�origin_req_host� unverifiable�method) �selfrHrIrer}r~r�key�valuerLrLrM�__init__FszRequest.__init__cCs|jrdj|j|j�S|jS)Nz{}#{})�fragment�format� _full_url)r�rLrLrMrpXszRequest.full_urlcCs(t|�|_t|j�\|_|_|j�dS)N)rr�rr��_parse)r�rHrLrLrMrp^s cCsd|_d|_d|_dS)Nrn)r�r��selector)r�rLrLrMrpescCs|jS)N)ry)r�rLrLrMrIksz Request.datacCs(||jkr$||_|jd�r$|jd�dS)NzContent-length)ry� has_header� remove_header)r�rIrLrLrMrIos  cCs d|_dS)N)rI)r�rLrLrMrIyscCsNt|j�\|_}|jdkr(td|j��t|�\|_|_|jrJt|j�|_dS)Nzunknown url type: %r) r r��typerBrpr rvr�r )r��restrLrLrMr�}s  zRequest._parsecCs|jdk rdnd}t|d|�S)N�POST�GETr)rI�getattr)r�Zdefault_methodrLrLrM� get_method�szRequest.get_methodcCs|jS)N)rp)r�rLrLrM� get_full_url�szRequest.get_full_urlcCs4|jdkr|j r|j|_n||_|j|_||_dS)N�https)r�rzrvrpr�)r�rvr�rLrLrM� set_proxy�s  zRequest.set_proxycCs |j|jkS)N)r�rp)r�rLrLrM� has_proxy�szRequest.has_proxycCs||j|j�<dS)N)re� capitalize)r�r��valrLrLrMr|�szRequest.add_headercCs||j|j�<dS)N)rxr�)r�r�r�rLrLrM�add_unredirected_header�szRequest.add_unredirected_headercCs||jkp||jkS)N)rerx)r�� header_namerLrLrMr��s zRequest.has_headercCs|jj||jj||��S)N)re�getrx)r�r��defaultrLrLrMrq�szRequest.get_headercCs |jj|d�|jj|d�dS)N)re�poprx)r�r�rLrLrMr��szRequest.remove_headercCs"|jj�}|j|j�t|j��S)N)rx�copy�updatere�listr{)r��hdrsrLrLrM� header_items�s  zRequest.header_items)N)�__name__� __module__� __qualname__r��propertyrp�setter�deleterrIr�r�r�r�r�r|r�r�rqr�r�rLrLrLrMrDs(     c@sNeZdZdd�Zdd�Zdd�Zdd�Zd ejfd d �Z dd d �Z dd�Z d S)rcCs6dt}d|fg|_g|_i|_i|_i|_i|_dS)NzPython-urllib/%sz User-agent)� __version__� addheaders�handlers� handle_open� handle_error�process_response�process_request)r�Zclient_versionrLrLrMr��s zOpenerDirector.__init__c CsZt|d�stdt|���d}�xt|�D�]}|dkr:q*|jd�}|d|�}||dd�}|jd �r�|jd�|d}||dd�}y t|�}Wntk r�YnX|jj |i�} | |j|<n>|d kr�|}|j } n*|d kr�|}|j } n|d kr*|}|j } nq*| j |g�} | �r&tj| |�n | j|�d }q*W|�rVtj|j|�|j|�dS)N� add_parentz%expected BaseHandler instance, got %rF�redirect_request�do_open� proxy_open�_rR�errorrG�responseruT)r�r�r�)�hasattr� TypeErrorr��dir�find� startswithr^rBr�r�r�r�r�� setdefault�bisectZinsortr]r�r�) r��handlerZadded�meth�i�protocolZ condition�j�kind�lookupr�rLrLrM� add_handler�sJ         zOpenerDirector.add_handlercCsdS)NrL)r�rLrLrM�close�szOpenerDirector.closec Gs<|j|f�}x*|D]"}t||�}||�}|dk r|SqWdS)N)r�r�) r��chainr�� meth_name�argsr�r��funcrgrLrLrM� _call_chain�s    zOpenerDirector._call_chainNc Cs�t|t�rt||�}n|}|dk r(||_||_|j}|d}x(|jj|g�D]}t||�}||�}qLW|j ||�} |d}x*|j j|g�D]}t||�}||| �} q�W| S)NZ_requestZ _response) � isinstance�strrrIrJr�r�r�r��_openr�) r��fullurlrIrJ�reqr�r�Z processorr�r�rLrLrMrG�s"      zOpenerDirector.opencCsP|j|jdd|�}|r|S|j}|j|j||d|�}|r>|S|j|jdd|�S)Nr�Z default_openr��unknown� unknown_open)r�r�r�)r�r�rIrgr�rLrLrMr�s    zOpenerDirector._opencGs~|d kr,|jd}|d}d|}d}|}n|j}|d}d}|||f|}|j|�}|r^|S|rz|dd f|}|j|�SdS) N�httpr�r:z http_error_%srRZ_errorrr��http_error_default)r�r�)r�r�)r��protor��dictr�Zhttp_errZ orig_argsrgrLrLrMr�'s   zOpenerDirector.error)N) r�r�r�r�r�r�r��socket�_GLOBAL_DEFAULT_TIMEOUTrGr�r�rLrLrLrMr�s /  c Gs�t�}ttttttttt g }t t j d�r2|j t�t�}xN|D]F}x@|D]8}t|t�rlt||�r�|j|�qHt||�rH|j|�qHWq>Wx|D]}|j|�q�Wx|D]}|j|��q�Wx&|D]}t|t�r�|�}|j|�q�W|S)N�HTTPSConnection)rrr.r)rrr+r*r/r-r�r��clientr]rE�setr�r�� issubclass�add�remover�)r�rKZdefault_classes�skip�klassZcheck�hrLrLrMr2@s0             c@s(eZdZdZdd�Zdd�Zdd�ZdS) ri�cCs ||_dS)N)�parent)r�r�rLrLrMr�gszBaseHandler.add_parentcCsdS)NrL)r�rLrLrMr�jszBaseHandler.closecCst|d�sdS|j|jkS)N� handler_orderT)r�r�)r��otherrLrLrM�__lt__ns zBaseHandler.__lt__N)r�r�r�r�r�r�r�rLrLrLrMrdsc@seZdZdZdd�ZeZdS)r/i�cCsJ|j|j|j�}}}d|ko*dknsF|jjd|||||�}|S)N��i,r�)�code�msgrVr�r�)r�rur�r�r�r�rLrLrM� http_response{s z HTTPErrorProcessor.http_responseN)r�r�r�r�r��https_responserLrLrLrMr/ws c@seZdZdd�ZdS)rcCst|j||||��dS)N)rrp)r�r�rdr�r�r�rLrLrMr��sz*HTTPDefaultErrorHandler.http_error_defaultN)r�r�r�r�rLrLrLrMr�sc@s4eZdZdZdZdd�Zdd�ZeZZZ dZ dS) r�� c sx|j�}|dkr|dkp&|dko&|dks:t|j||||��|jdd �}d�t�fd d �|jj�D��}t|||jdd�S)N�-�.�/�3r��HEADr�� z%20�content-length� content-typec3s&|]\}}|j��kr||fVqdS)N)rt)�.0�k�v)�CONTENT_HEADERSrLrM� �sz7HTTPRedirectHandler.redirect_request..T)rer}r~)r�r�r�r�)r�r�)r�r�r�)r�r�) r�rrp�replacer�rer{rr}) r�r�rdr�r�re�newurl�mZ newheadersrL)r�rMr��s  z$HTTPRedirectHandler.redirect_requestc CsNd|kr|d}nd|kr$|d}ndSt|�}|jdkrRt||d||f||��|j rp|jrpt|�}d|d <t|�}t|d tj d �}t |j |�}|j ||||||�}|dkr�dSt |d ��r|j} |_| j|d �|jks�t| �|jk�rt|j ||j|||��ni} |_|_| j|d �d| |<|j�|j�|jj||jd�S)N�location�urir�r��ftprnz+%s - Redirection to url '%s' is not allowed�/r:z iso-8859-1)�encoding�safe� redirect_dictrrR)rJ)r�r�r�rn)r�schemerrXZnetlocr�rr �stringZ punctuationrrpr�r�rr�� max_repeatsr`�max_redirections�inf_msgr_r�r�rGrJ) r�r�rdr�r�rer��urlparts�newZvisitedrLrLrM�http_error_302�s@       z"HTTPRedirectHandler.http_error_302zoThe HTTP server returned a redirect error that would lead to an infinite loop. The last 30x error message was: N) r�r�r�rrr�r �http_error_301�http_error_303�http_error_307rrLrLrLrMr�s &< c Cs�t|�\}}|jd�s d}|}n:|jd�s6td|��|jdd�}|dkrNd}|d|�}t|�\}}|dk r|t|�\}}nd}}||||fS)Nr�z//zproxy URL with no authority: %rr:rRrS)r r�rBr�rr) �proxyrZr_scheme� authority�endZuserinfo�hostport�user�passwordrLrLrM� _parse_proxy�s       rc@s"eZdZdZddd�Zdd�ZdS)r�dNcCsL|dkrt�}||_x2|j�D]&\}}t|d||||jfdd��qWdS)Nz%s_opencSs ||||�S)NrL)�rr r�r�rLrLrM�%sz'ProxyHandler.__init__..)r5�proxiesr{�setattrr�)r�rr�rHrLrLrMr�s  zProxyHandler.__init__c Cs�|j}t|�\}}}}|dkr"|}|jr6t|j�r6dS|rv|rvdt|�t|�f} tj| j��jd�} |j dd| �t|�}|j ||�||ks�|dkr�dS|j j ||j d�SdS)Nz%s:%s�asciizProxy-authorizationzBasic r�)rJ)r�rrv� proxy_bypassr �base64� b64encode�encode�decoder|r�r�rGrJ) r�r�r r�Z orig_typeZ proxy_typerrrZ user_passZcredsrLrLrMr�(s   zProxyHandler.proxy_open)N)r�r�r�r�r�r�rLrLrLrMrs c@s6eZdZdd�Zdd�Zdd�Zd dd �Zd d �Zd S)r cCs i|_dS)N)�passwd)r�rLrLrMr�FszHTTPPasswordMgr.__init__cs`t|t�r|g}|�jkr$i�j|<x6dD].�t��fdd�|D��}||f�j||<q*WdS)NTFcsg|]}�j|���qSrL)� reduce_uri)r��u)� default_portr�rLrM� Qsz0HTTPPasswordMgr.add_password..)TF)r�r�r�tuple)r��realmr�rr� reduced_urirL)r"r�rM� add_passwordIs    zHTTPPasswordMgr.add_passwordc Cs`|jj|i�}xLdD]D}|j||�}x2|j�D]&\}}x|D]}|j||�r<|SqdD]6}|j||�}x$|jD]}|j||�r|j|SqWqWdS)NTF)TF)r r4r()r�r)r"r*r�rLrLrMr9�s     z-HTTPPasswordMgrWithPriorAuth.is_authenticated)F)F)r�r�r�r�r'r8r9� __classcell__rLrL)r7rMr"�s  c@sTeZdZejdej�Zddd�Zdd�Zdd�Z d d �Z d d �Z d d�Z e Z e ZdS)r#z1(?:^|,)[ ]*([^ ,]+)[ ]+realm=(["']?)([^"']*)\2NcCs"|dkrt�}||_|jj|_dS)N)r rr')r�Z password_mgrrLrLrMr��sz!AbstractBasicAuthHandler.__init__ccstd}xFtjj|�D]6}|j�\}}}|d kr:tjdtd�||fVd}qW|sp|rb|j�d}nd}|dfVdS) NF�"�'zBasic Auth Realm was unquoted�Trrn)r;r<)r#�rx�finditer�groupsr?r@� UserWarning�split)r��headerZfound_challengeZmorr r%rLrLrM� _parse_realm�s z%AbstractBasicAuthHandler._parse_realmc Cs~|j|�}|sdSd}xL|D]D}x>|j|�D]0\}}|j�dkrF|}q,|dk r,|j|||�Sq,WqW|dk rztd|f��dS)N�basiczBAbstractBasicAuthHandler does not support the following scheme: %r)Zget_allrDrt�retry_http_basic_authrB) r��authreqrvr�reZ unsupportedrCrr%rLrLrM�http_error_auth_reqed�s   z.AbstractBasicAuthHandler.http_error_auth_reqedcCs||jj||�\}}|dk rtd||f}dtj|j��jd�}|j|jd�|krTdS|j|j|�|j j ||j d�SdSdS)Nz%s:%szBasic r)rJ) rr+rrrrrq� auth_headerr�r�rGrJ)r�rvr�r%r�pw�raw�authrLrLrMrF�s z.AbstractBasicAuthHandler.retry_http_basic_authcCsxt|jd� s|jj|j� r"|S|jd�st|jjd|j�\}}dj||�j�}tj |�j �}|j ddj|j ���|S)Nr9� Authorizationz{0}:{1}zBasic {}) r�rr9rpr�r+r�rrZstandard_b64encoderr��strip)r�r�rrZ credentialsZauth_strrLrLrM� http_requests z%AbstractBasicAuthHandler.http_requestcCsLt|jd�rHd|jko dknr8|jj|jd�n|jj|jd�|S)Nr9r�i,TF)r�rr�r8rp)r�r�r�rLrLrMr�s  z&AbstractBasicAuthHandler.http_response)N)r�r�r��re�compile�Ir>r�rDrHrFrOr�� https_requestr�rLrLrLrMr#�s   c@seZdZdZdd�ZdS)r$rMcCs|j}|jd|||�}|S)Nzwww-authenticate)rprH)r�r�rdr�r�rerHr�rLrLrM�http_error_401 s z#HTTPBasicAuthHandler.http_error_401N)r�r�r�rIrTrLrLrLrMr$sc@seZdZdZdd�ZdS)r%zProxy-authorizationcCs|j}|jd|||�}|S)Nzproxy-authenticate)rvrH)r�r�rdr�r�rerr�rLrLrM�http_error_407+s z$ProxyBasicAuthHandler.http_error_407N)r�r�r�rIrUrLrLrLrMr%'sc@sNeZdZddd�Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dS)r&NcCs4|dkrt�}||_|jj|_d|_d|_d|_dS)Nr)r rr'�retried� nonce_count� last_nonce)r�rrLrLrMr�Es z"AbstractDigestAuthHandler.__init__cCs d|_dS)Nr)rV)r�rLrLrM�reset_retry_countNsz+AbstractDigestAuthHandler.reset_retry_countcCs||j|d�}|jdkr*t|jdd|d��n|jd7_|rx|j�d}|j�dkr`|j||�S|j�dkrxtd|��dS) N�i�zdigest auth failedrRrZdigestrEzEAbstractDigestAuthHandler does not support the following scheme: '%s')r�rVrrprBrt�retry_http_digest_authrB)r�rIrvr�rerGrrLrLrMrHQs        z/AbstractDigestAuthHandler.http_error_auth_reqedcCsz|jdd�\}}ttdt|���}|j||�}|rvd|}|jj|jd�|krRdS|j|j|�|j j ||j d�}|SdS)Nr�rRz Digest %s)rJ) rB�parse_keqv_list�filter�parse_http_list�get_authorizationrer�rIr�r�rGrJ)r�r�rL�tokenZ challenge�chalZauth_valZresprLrLrMr[es z0AbstractDigestAuthHandler.retry_http_digest_authcCs@d|j|tj�f}|jd�td�}tj|�j�}|dd�S)Nz %s:%s:%s:rrQ�)rW�timeZctimer� _randombytes�hashlib�sha1� hexdigest)r��nonce�s�b�digrLrLrM� get_cnonceqsz$AbstractDigestAuthHandler.get_cnoncecCs�y6|d}|d}|jd�}|jdd�}|jdd�}Wntk rJdSX|j|�\}} |dkrfdS|jj||j�\} } | dkr�dS|jdk r�|j|j|�} nd} d| || f} d|j�|j f}|d k�r.||j kr�|j d 7_ n d |_ ||_ d |j }|j |�}d ||||||�f}| || �|�}n2|dk�rT| || �d|||�f�}n t d |��d| |||j |f}|�r�|d|7}| �r�|d| 7}|d|7}|�r�|d||f7}|S)Nr%rh�qop� algorithm�MD5�opaquez%s:%s:%sz%s:%srLrRz%08xz%s:%s:%s:%s:%szqop '%s' is not supported.z>username="%s", realm="%s", nonce="%s", uri="%s", response="%s"z , opaque="%s"z , digest="%s"z, algorithm="%s"z, qop=auth, nc=%s, cnonce="%s")r��KeyError�get_algorithm_implsrr+rprI�get_entity_digestr�r�rXrWrlr)r�r�rar%rhrmrnrp�H�KDrrJZentdigZA1ZA2ZncvalueZcnonceZnoncebitZrespdigr1rLrLrMr_|sV              z+AbstractDigestAuthHandler.get_authorizationcsD|dkrdd��n|dkr$dd��n td|���fdd�}�|fS)NrocSstj|jd��j�S)Nr)reZmd5rrg)�xrLrLrMr�sz?AbstractDigestAuthHandler.get_algorithm_impls..ZSHAcSstj|jd��j�S)Nr)rerfrrg)rvrLrLrMr�sz.Unsupported digest authentication algorithm %rcs�d||f�S)Nz%s:%srL)ri�d)rtrLrMr�s)rB)r�rnrurL)rtrMrr�s   z-AbstractDigestAuthHandler.get_algorithm_implscCsdS)NrL)r�rIrarLrLrMrs�sz+AbstractDigestAuthHandler.get_entity_digest)N) r�r�r�r�rYrHr[rlr_rrrsrLrLrLrMr&:s   < c@seZdZdZdZdd�ZdS)r'rMi�cCs*t|j�d}|jd|||�}|j�|S)NrRzwww-authenticate)rrprHrY)r�r�rdr�r�rerv�retryrLrLrMrT�s  z$HTTPDigestAuthHandler.http_error_401N)r�r�r�rIr�rTrLrLrLrMr'�sc@seZdZdZdZdd�ZdS)r(zProxy-Authorizationi�cCs"|j}|jd|||�}|j�|S)Nzproxy-authenticate)rvrHrY)r�r�rdr�r�rervrxrLrLrMrU�s  z%ProxyDigestAuthHandler.http_error_407N)r�r�r�rIr�rUrLrLrLrMr(�sc@s6eZdZd dd�Zdd�Zdd�Zdd �Zd d �Zd S)�AbstractHTTPHandlerrcCs ||_dS)N)� _debuglevel)r�� debuglevelrLrLrMr��szAbstractHTTPHandler.__init__cCs ||_dS)N)rz)r��levelrLrLrM�set_http_debuglevel�sz'AbstractHTTPHandler.set_http_debuglevelcCstjjj|j|j��S)N)r�r��HTTPConnection�_get_content_lengthrIr�)r�rurLrLrMr�sz'AbstractHTTPHandler._get_content_lengthc Cs |j}|std��|jdk r�|j}t|t�r8d}t|��|jd�sN|jdd�|jd� r�|jd� r�|j|�}|dk r�|jdt|��n |jdd�|}|j �r�t |j �\}}t |�\}} |jd�s�|jd|�x2|j jD]&\} } | j�} |j| �s�|j| | �q�W|S) Nz no host givenz\POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.z Content-typez!application/x-www-form-urlencodedzContent-lengthzTransfer-encodingZchunkedro)rvrrIr�r�r�r�r�rr�r r�r r�r�r�) r�rurvrIr�Zcontent_lengthZsel_hostrZselZsel_pathr[r�rLrLrM� do_request_�s>          zAbstractHTTPHandler.do_request_c  s\|j}|std��||fd|ji|��}|j|j�t|j���jt�fdd�|jj �D���d�d<tdd��j �D���|j r�i}d}|�kr��|||<�|=|j |j |d �y`y&|j |j �|j|j�|jd �d �Wn,tk �r }zt|��WYdd}~XnX|j�} Wn|j��YnX|j�rF|jj�d|_|j�| _| j| _| S) Nz no host givenrJc3s"|]\}}|�kr||fVqdS)NrL)r�r�r�)rerLrMr�)sz.AbstractHTTPHandler.do_open..r�� Connectioncss|]\}}|j�|fVqdS)N)�title)r�r[r�rLrLrMr�6szProxy-Authorization)rezTransfer-encoding)Zencode_chunked)rvrrJZset_debuglevelrzr�rxr�rer{rzZ set_tunnelrur�r�rIr�rm� getresponser�Zsockr�rH�reasonr�) r�Z http_classr�Zhttp_conn_argsrvr�Ztunnel_headersZproxy_auth_hdr�errrrL)rerMr�s@  "     zAbstractHTTPHandler.do_openN)r)r�r�r�r�r}rr�r�rLrLrLrMry�s  &ryc@seZdZdd�ZejZdS)r)cCs|jtjj|�S)N)r�r�r�r~)r�r�rLrLrM� http_open`szHTTPHandler.http_openN)r�r�r�r�ryr�rOrLrLrLrMr)^sr�c@s$eZdZddd�Zdd�ZejZdS)rErNcCstj||�||_||_dS)N)ryr��_context�_check_hostname)r�r{r>�check_hostnamerLrLrMr�is zHTTPSHandler.__init__cCs|jtjj||j|jd�S)N)r>r�)r�r�r�r�r�r�)r�r�rLrLrM� https_openns zHTTPSHandler.https_open)rNN)r�r�r�r�r�ryr�rSrLrLrLrMrEgs rEc@s.eZdZddd�Zdd�Zdd�ZeZeZdS) rNcCs$ddl}|dkr|jj�}||_dS)Nr)Zhttp.cookiejar� cookiejarZ CookieJar)r�r�r�rLrLrMr�ws zHTTPCookieProcessor.__init__cCs|jj|�|S)N)r�Zadd_cookie_header)r�rurLrLrMrO}s z HTTPCookieProcessor.http_requestcCs|jj||�|S)N)r�Zextract_cookies)r�rur�rLrLrMr��sz!HTTPCookieProcessor.http_response)N)r�r�r�r�rOr�rSr�rLrLrLrMrvs  c@seZdZdd�ZdS)r.cCs|j}td|��dS)Nzunknown url type: %s)r�r)r�r�r�rLrLrMr��szUnknownHandler.unknown_openN)r�r�r�r�rLrLrLrMr.�scCsRi}xH|D]@}|jdd�\}}|ddkrB|ddkrB|dd�}|||<q W|S)N�=rRrr;rSrS)rB)�lZparsedZeltr�r�rLrLrMr\�s   r\cCs�g}d}d}}xt|D]l}|r,||7}d}q|rV|dkr@d}qn |dkrLd}||7}q|dkrn|j|�d}q|dkrzd}||7}qW|r�|j|�dd�|D�S) NrnF�\Tr;�,cSsg|] }|j��qSrL)rN)r��partrLrLrMr#�sz#parse_http_list..)r])ri�resr��escaper ZcurrLrLrMr^�s4     r^c@s(eZdZdd�ZdZdd�Zdd�ZdS)r*cCs\|j}|dd�dkrN|dd�dkrN|jrN|jdkrN|j|j�krXtd��n |j|�SdS)Nr:z//r=r�� localhostz-file:// scheme is supported only on localhost)r�rv� get_namesr�open_local_file)r�r�rHrLrLrM� file_open�s &  zFileHandler.file_openNc Cs`tjdkrZy*ttjd�dtjtj��d�t_Wn$tjk rXtjd�ft_YnXtjS)Nr�r:)r*�namesr$r��gethostbyname_ex� gethostname�gaierror� gethostbyname)r�rLrLrMr��s  zFileHandler.get_namescCsddl}ddl}|j}|j}t|�}y�tj|�}|j}|jj |j dd�} |j |�d} |j d| pbd|| f�} |r~t |�\}} | s�| r�t|�|j�kr�|r�d||} nd|} tt|d�| | �SWn*tk r�}zt|��WYdd}~XnXtd��dS) NrT)�usegmtz6Content-type: %s Content-length: %d Last-modified: %s z text/plainzfile://�rbzfile not on local host)� email.utils� mimetypesrvr�r4rW�stat�st_size�utils� formatdate�st_mtime� guess_type�message_from_stringr �_safe_gethostbynamer�rrGrmr)r�r��emailr�rvrbZ localfile�statsri�modified�mtyperer.Zorigurl�exprLrLrMr��s0  zFileHandler.open_local_file)r�r�r�r�r�r�r�rLrLrLrMr*�s  c Cs&y tj|�Stjk r dSXdS)N)r�r�r�)rvrLrLrMr��s r�c@seZdZdd�Zdd�ZdS)r+cCs.ddl}ddl}|j}|s"td��t|�\}}|dkr>|j}nt|�}t|�\}}|rdt|�\}}nd}t |�}|pvd}|p~d}yt j |�}Wn*t k r�}zt|��WYdd}~XnXt |j�\} } | jd�} ttt | ��} | dd�| d} } | �r| d �r| dd�} y�|j||||| |j�} | �r8d�p:d}x:| D]2}t|�\}}|j�dk�rB|dk�rB|j�}�qBW| j| |�\}}d}|j|j�d}|�r�|d |7}|dk �r�|dk�r�|d|7}tj|�}t|||j�S|jk �r(}z$td|�}|jtj �d��WYdd}~XnXdS)Nrzftp error: no host givenrnr�rRrR�Dr��a�Ar�rwzContent-type: %s zContent-length: %d z ftp error: %rr:rSrS)r�r�r�rRrwr�)!�ftplibr�rvrr �FTP_PORTr^rrr r�r�rmrr�rBr��map� connect_ftprJrrt�upper�retrfiler�rpr�r�r� all_errors�with_traceback�sys�exc_info)r�r�r�r�rvr.rrr�rX�attrs�dirsrN�fwr��attrr�rd�retrlenrer�r��excrLrLrM�ftp_open�s\           zFTPHandler.ftp_openc Cst||||||dd�S)NF)� persistent)� ftpwrapper)r�rrrvr.r�rJrLrLrMr�1szFTPHandler.connect_ftpN)r�r�r�r�r�rLrLrLrMr+�s5c@s<eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd S)r,cCs"i|_i|_d|_d|_d|_dS)Nr�<rb)�cacherJ�soonest�delay� max_conns)r�rLrLrMr�8s zCacheFTPHandler.__init__cCs ||_dS)N)r�)r��trLrLrM� setTimeout?szCacheFTPHandler.setTimeoutcCs ||_dS)N)r�)r�r�rLrLrM� setMaxConnsBszCacheFTPHandler.setMaxConnscCsr|||dj|�|f}||jkr4tj�|j|j|<n,t||||||�|j|<tj�|j|j|<|j�|j|S)Nr�)�joinr�rcr�rJr�� check_cache)r�rrrvr.r�rJr�rLrLrMr�Es  zCacheFTPHandler.connect_ftpcCs�tj�}|j|krTx@t|jj��D].\}}||kr"|j|j�|j|=|j|=q"Wtt|jj���|_t |j�|j kr�x6t|jj��D]$\}}||jkr�|j|=|j|=Pq�Wtt|jj���|_dS)N) rcr�r�rJr{r�r��min�valuesr`r�)r�r�r�r�rLrLrMr�Ps   zCacheFTPHandler.check_cachecCs4x|jj�D] }|j�q W|jj�|jj�dS)N)r�r�r��clearrJ)r��connrLrLrM� clear_cacheds  zCacheFTPHandler.clear_cacheN) r�r�r�r�r�r�r�r�r�rLrLrLrMr,5s  c@seZdZdd�ZdS)r-cCs~|j}|jdd�\}}|jdd�\}}t|�}|jd�rNtj|�}|dd�}|sVd}tjd|t|�f�}t t j |�||�S) N�:rRr�z;base64�ztext/plain;charset=US-ASCIIz$Content-type: %s Content-length: %d i����) rprBr�endswithr� decodebytesr�r�r`r�io�BytesIO)r�r�rHrrIZ mediatypererLrLrM� data_openks    zDataHandler.data_openN)r�r�r�r�rLrLrLrMr-jsr��nt)r4r3cCst|�S)N)r )�pathnamerLrLrMr4�scCst|�S)N)r )r�rLrLrMr3�sc@s�eZdZdZdeZd)dd�Zdd�Zdd�Zd d �Z d d �Z d*d d�Z d+dd�Z d,dd�Z d-dd�Zdd�Zd.dd�Zd/dd�Zdd�Zer�dd�Zd0dd �Zd!d"�Zd#d$�Zd%d&�Zd1d'd(�ZdS)2r8NzPython-urllib/%scKszdd|jji}tj|tdd�|dkr.t�}||_|jd�|_|jd�|_ d|j fd g|_ g|_ t j|_d|_t|_dS) NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methods�classr=)� stacklevel�key_file� cert_filez User-Agent�Accept�*/*)r�r�)r7r�r?r@rAr5rr�r�r��versionr��_URLopener__tempfilesrWrl�_URLopener__unlink� tempcache�ftpcache)r�rZx509r�rLrLrMr��s  zURLopener.__init__cCs |j�dS)N)r�)r�rLrLrM�__del__�szURLopener.__del__cCs |j�dS)N)�cleanup)r�rLrLrMr��szURLopener.closec CsZ|jrFx2|jD](}y|j|�Wqtk r4YqXqW|jdd�=|jrV|jj�dS)N)r�r�rmr�r�)r�rNrLrLrMr��s   zURLopener.cleanupcGs|jj|�dS)N)r�r])r�r�rLrLrM� addheader�szURLopener.addheadercCsntt|��}t|dd�}|jrL||jkrL|j|\}}t|d�}t|||�St|�\}}|s`d}||jkr�|j|}t|�\}} t| �\} } | |f}nd}d|} ||_ | j dd�} t || � s�| dkr�|r�|j |||�S|j ||�Sy,|dk�rt|| �|�St|| �||�SWnVttfk �r.�Yn<tk �rh} ztd | �jtj�d ��WYdd} ~ XnXdS) Nz%/:=&?~#+!$,;'@()*[]|)rr�rNZopen_�-r�r�z socket errorr:)rrr r�rGrr rr r�r�r��open_unknown_proxy� open_unknownr�rrrmr�r�r�)r�r�rIrbrerd�urltyperHr � proxyhostrvr�r[r�rLrLrMrG�s<             zURLopener.opencCst|�\}}tdd|��dS)Nz url errorzunknown url type)r rm)r�r�rIr�rHrLrLrMr�s zURLopener.open_unknowncCs t|�\}}tdd||��dS)Nz url errorzinvalid proxy for %s)r rm)r�r r�rIr�rHrLrLrMr� s zURLopener.open_unknown_proxyc Cs&tt|��}|jr&||jkr&|j|St|�\}}|dkr�| sH|dkr�y.|j|�}|j�}|j�tt|�d�|fSt k r�} zWYdd} ~ XnX|j ||�}�zH|j�} |r�t |d�} n|ddl } t|�\} }t|p�d�\} }t |p�d�\}} t |�pd�\}} tjj|�d}| j|�\}}|jj|�tj|d�} z�|| f}|jdk �r^||j|<d }d }d}d}d| k�r�t| d �}|�r�||||�xH|j|�}|�s�P|t|�7}| j|�|d7}|�r�||||��q�WWd| j�XWd|j�X|dk�r"||k�r"td ||f|��|S) NrNrRrOrrnirQzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi rS)rrr�r r�rVr�r4r rmrGrZrrrWrX�splitextZmkstempr�r]�fdopenr^r_r`rar)r�rHrbrcrIr�Zurl1rdr�r�rerfrZZgarbagerX�suffix�fdrgrhrir_rjrkrLrLrM�retrievesl                  zURLopener.retrievecCs(d}d}t|t�rtd |��tt|d �| | �Std ��dS)NrT)r�z6Content-Type: %s Content-Length: %d Last-modified: %s z text/plainrRr�zfile://r�r:z./zAlocal file url may start with / or file:. Unknown url of type: %sz#local file error: not on local host)r�r�r r4rWr�rmr�strerrorrbr�r�r�r�r�r�rrGr r�r�r��thishostrB)r�rHr�r�rvrNZ localnamer��erir�r�reZurlfiler.rLrLrMr��s:     zURLopener.open_local_filecCs�t|t�std��ddl}t|�\}}|s2td��t|�\}}t|�\}}|r\t|�\}}nd}t|�}t|ppd�}t|p|d�}t j |�}|s�ddl }|j }nt |�}t|�\}} t|�}|jd�} | dd�| d} } | o�| d �r�| dd�} | �r| d �rd| d<|||dj| �f} t|j�tk�rlx8t|j�D]*} | | k�r>|j| }|j| =|j��q>Wy�| |jk�r�t||||| �|j| <| �s�d}nd}x:| D]2}t|�\}}|j�d k�r�|dk�r�|j�}�q�W|j| j| |�\}}|jd|�d}d}|�r|d|7}|dk �r:|dk�r:|d|7}tj|�}t||d|�St�k �r�}z td|�j t!j"�d��WYdd}~XnXdS)NzCftp error: proxy support for ftp protocol currently not implementedrzftp error: no host givenrnr�rRr�rRr�r�r�r�rwzftp:zContent-Type: %s zContent-Length: %d z ftp error %rr:rSrS)r�r�r�rRrwr�)#r�r�rr�r r rrr r�r�r�r�r^rrBr�r`r�� MAXFTPCACHEr�r�r�rrtr�r�r�r�r�r� ftperrorsr�r�r�)r�rHr�rvrXr.rrr�r�r�rNr�r�r�r�r�r�rdr�r�rer�rLrLrM�open_ftp�sp                   zURLopener.open_ftpc Cs<t|t�std��y|jdd�\}}Wntk rDtdd��YnX|sNd}|jd�}|dkr�d ||d�kr�||dd�}|d|�}nd }g}|jd tj d tj tj����|jd |�|dkr�t j |j d��jd�}nt|�}|jdt|��|jd �|j|�dj|�}tj|�}tj|�}t|||�S)NzEdata error: proxy support for data protocol currently not implementedr�rRz data errorz bad data URLztext/plain;charset=US-ASCII�;rr�rnzDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %srrzlatin-1zContent-Length: %d� )r�r�rrBrBrm�rfindr]rcZstrftimeZgmtimerr�rrr r`r�r�r�r��StringIOr) r�rHrIr�Zsemir�r�re�frLrLrM� open_data3s6        zURLopener.open_data)N)N)N)N)NNN)N)N)N)N)r�r�r�r�r�r�r�r�r�r�r�rGr�r�r�r�r�r�r�rCr�r�r�r�rrrLrLrLrMr8�s,  $   B\     :c@s�eZdZdd�Zdd�Zd"dd�Zdd �Zd#d d �Zd$d d �Zd%dd�Z d&dd�Z d'dd�Z d(dd�Z d)dd�Z d*dd�Zd+dd�Zd,dd�Zd d!�ZdS)-r9cOs(tj|f|�|�i|_d|_d|_dS)Nrr�)r8r�� auth_cache�tries�maxtries)r�r�r6rLrLrMr�`szFancyURLopener.__init__cCst||d||�S)Nzhttp:)r)r�rHrdr�r�rerLrLrMr�fsz!FancyURLopener.http_error_defaultNc Csn|jd7_zR|jrJ|j|jkrJt|d�r4|j}n|j}|||dd|�S|j||||||�}|Sd|_XdS)NrR�http_error_500i�z)Internal Server Error: Redirect Recursionr)r r r�r r��redirect_internal) r�rHrdr�r�rerIr�rgrLrLrMr js  zFancyURLopener.http_error_302c Csxd|kr|d}nd|kr$|d}ndS|j�t|jd||�}t|�}|jd krnt|||d|||��|j|�S) Nr�r�r�r�r�r�rnz( Redirection to url '%s' is not allowed.)r�r�r�rn)r�rr�rrrrG) r�rHrdr�r�rerIr�rrLrLrMr |s   z FancyURLopener.redirect_internalcCs|j||||||�S)N)r )r�rHrdr�r�rerIrLrLrMr �szFancyURLopener.http_error_301cCs|j||||||�S)N)r )r�rHrdr�r�rerIrLrLrMr �szFancyURLopener.http_error_303cCs2|dkr|j||||||�S|j|||||�SdS)N)r r�)r�rHrdr�r�rerIrLrLrMr �szFancyURLopener.http_error_307Fc Cs�d|krtj||||||�|d}tjd|�} | sHtj||||||�| j�\} } | j�dkrttj||||||�|s�tj||||||�d|jd} |dkr�t|| �|| �St|| �|| |�SdS)Nzwww-authenticatez![ ]*([^ ]+)[ ]+realm="([^"]*)"rEZretry_� _basic_auth)r8r�rP�matchr@rtr�r�) r�rHrdr�r�rerIrx�stuffrrr%r[rLrLrMrT�s&         zFancyURLopener.http_error_401c Cs�d|krtj||||||�|d}tjd|�} | sHtj||||||�| j�\} } | j�dkrttj||||||�|s�tj||||||�d|jd} |dkr�t|| �|| �St|| �|| |�SdS)Nzproxy-authenticatez![ ]*([^ ]+)[ ]+realm="([^"]*)"rEZ retry_proxy_r )r8r�rPrr@rtr�r�) r�rHrdr�r�rerIrxrrrr%r[rLrLrMrU�s&         zFancyURLopener.http_error_407cCs�t|�\}}d||}|jd}t|�\}} t| �\} } | jd�d} | | d�} |j| || �\} } | pl| srdSdt| dd�t| dd�| f} d| | |jd<|dkr�|j|�S|j||�SdS)Nzhttp://r��@rRz%s:%s@%srn)r)r rr r��get_user_passwdr rG)r�rHr%rIrvr�r�r r�r�� proxyselectorr�rrrLrLrM�retry_proxy_http_basic_auth�s         z*FancyURLopener.retry_proxy_http_basic_authcCs�t|�\}}d||}|jd}t|�\}} t| �\} } | jd�d} | | d�} |j| || �\} } | pl| srdSdt| dd�t| dd�| f} d| | |jd<|dkr�|j|�S|j||�SdS)Nzhttps://r�rrRz%s:%s@%srn)r)r rr r�rr rG)r�rHr%rIrvr�r�r r�r�rr�rrrLrLrM�retry_proxy_https_basic_auth�s         z+FancyURLopener.retry_proxy_https_basic_authc Cs�t|�\}}|jd�d}||d�}|j|||�\}}|p>|sDdSdt|dd�t|dd�|f}d||} |dkr�|j| �S|j| |�SdS)NrrRz%s:%s@%srn)rzhttp://)r r�rr rG) r�rHr%rIrvr�r�rrr�rLrLrMrF�s     z$FancyURLopener.retry_http_basic_authc Cs�t|�\}}|jd�d}||d�}|j|||�\}}|p>|sDdSdt|dd�t|dd�|f}d||} |dkr�|j| �S|j| |�SdS)NrrRz%s:%s@%srn)rzhttps://)r r�rr rG) r�rHr%rIrvr�r�rrr�rLrLrM�retry_https_basic_auth s     z%FancyURLopener.retry_https_basic_authrcCs`|d|j�}||jkr2|r(|j|=n |j|S|j||�\}}|sJ|rX||f|j|<||fS)Nr)rtr�prompt_user_passwd)r�rvr%r�r�rrrLrLrMr s   zFancyURLopener.get_user_passwdc CsTddl}y,td||f�}|jd|||f�}||fStk rNt�dSXdS)NrzEnter username for %s at %s: z#Enter password for %s in %s at %s: )NN)�getpass�input�KeyboardInterrupt�print)r�rvr%rrrrLrLrMr$ sz!FancyURLopener.prompt_user_passwd)N)N)N)N)NF)NF)N)N)N)N)r)r�r�r�r�r�r r r r r rTrUrrrFrrrrLrLrLrMr9]s"           cCstdkrtjd�atS)Nr�)� _localhostr�r�rLrLrLrMr�4 s r�c CsPtdkrLyttjtj��d�aWn(tjk rJttjd�d�aYnXtS)Nr:r�)� _thishostr$r�r�r�r�rLrLrLrMr�< s r�cCstdkrddl}|jatS)Nr)� _ftperrorsr�r�)r�rLrLrMrG srcCstdkrtjd�atS)Nrn)� _noheadersr�r�rLrLrLrM� noheadersP s rc@sFeZdZddd�Zdd�Zdd�Zd d �Zd d �Zd d�Zdd�Z dS)r�NTc CsX||_||_||_||_||_||_d|_||_y |j�Wn|j ��YnXdS)Nr) rrrvr.r�rJ�refcount� keepalive�initr�)r�rrrvr.r�rJr�rLrLrMr�] s zftpwrapper.__init__cCs\ddl}d|_|j�|_|jj|j|j|j�|jj|j |j �dj |j �}|jj |�dS)Nrr�)r��busyZFTPr�Zconnectrvr.rJZloginrrr�r��cwd)r�r�Z_targetrLrLrMr"m s  zftpwrapper.initc -Cs�ddl}|j�|dkr"d}d}n d|}d}y|jj|�Wn*|jk rh|j�|jj|�YnXd}|r�| r�yd|}|jj|�\}}WnR|jk r�}z4t|�dd�d kr�t d |�j t j �d ��WYdd}~XnX|�s�|jjd�|�rn|jj �} zJy|jj|�Wn4|jk �rP}zt d |�|�WYdd}~XnXWd|jj| �Xd |}nd }|jj|�\}}d|_t|jd�|j�} |jd7_|j�| |fS)Nrrwr�zTYPE ArRzTYPE zRETR r=Z550z ftp error: %rr:zLIST ZLISTr�)rwr�)r�� endtransferr�Zvoidcmdr�r"Z ntransfercmdZ error_permr�rr�r�r��pwdr$r#r�makefile� file_closer r�) r�rNr�r��cmd�isdirr�r�r�r&ZftpobjrLrLrMr�v sN     $ zftpwrapper.retrfilecCs d|_dS)Nr)r#)r�rLrLrMr%� szftpwrapper.endtransfercCsd|_|jdkr|j�dS)NFr)r!r � real_close)r�rLrLrMr�� s zftpwrapper.closecCs4|j�|jd8_|jdkr0|j r0|j�dS)NrRr)r%r r!r+)r�rLrLrMr(� szftpwrapper.file_closec Cs2|j�y|jj�Wnt�k r,YnXdS)N)r%r�r�r)r�rLrLrMr+� s zftpwrapper.real_close)NT) r�r�r�r�r"r�r%r�r(r+rLrLrLrMr�Z s  -r�cCs�i}xBtjj�D]4\}}|j�}|r|dd�dkr|||dd�<qWdtjkr^|jdd�xXtjj�D]J\}}|dd�dkrj|j�}|r�|||dd�<qj|j|dd �d�qjW|S) N��_proxyZREQUEST_METHODr�i����i����i����i����i����)rW�environr{rtr�)rr[r�rLrLrM�getproxies_environment� s   r/c Cs�|dkrt�}y |d}Wntk r.dSX|dkr.r��.z (.+\.)?%s$) r/rqr rB�lstriprPr�rrR)rvrZno_proxy�hostonlyr.Z no_proxy_listr[�patternrLrLrM�proxy_bypass_environment� s&     r6c Csddlm}t|�\}}dd�}d|kr4|dr4dSd}x�|jdf�D]�}|sPqFtjd |�}|dk �r|dkr�ytj|�}||�}Wntk r�wFYnX||jd ��} |jd �} | dkr�d |jd �j d�d } nt | d d��} d | } || ?| | ?k�rdSqF|||�rFdSqFWdS)Nr)�fnmatchcSsh|jd�}ttt|��}t|�dkr<|ddddgdd�}|dd>|dd>B|dd>B|d BS) Nr2r�r�rRrbr:rQr=)rBr�r�r^r`)ZipAddrr-rLrLrM�ip2num s   z,_proxy_bypass_macosx_sysconf..ip2numr2Zexclude_simpleT� exceptionsz(\d+(?:\.\d+)*)(/\d+)?rRr:rQ� F) r7r r�rPrr�r�rm�group�countr^) rv�proxy_settingsr7r4r.r9ZhostIPr�r�r1�maskrLrLrM�_proxy_bypass_macosx_sysconf� s:        r@�darwin)�_get_proxy_settings� _get_proxiescCst�}t||�S)N)rBr@)rvr>rLrLrM�proxy_bypass_macosx_sysconf: srDcCst�S)N)rCrLrLrLrM�getproxies_macosx_sysconf> srEcCs t�}|rt||�St|�SdS)N)r/r6rD)rvrrLrLrMrH s rcCs t�p t�S)N)r/rErLrLrLrMr5U scCsi}y ddl}Wntk r$|SXy�|j|jd�}|j|d�d}|r�t|j|d�d�}d|kr�x�|jd�D]4}|jdd�\}}tjd|�s�d ||f}|||<qrWn>|dd �d kr�||d <n$d ||d <d||d<d||d<|j �Wnt t t fk �rYnX|S)Nrz;Software\Microsoft\Windows\CurrentVersion\Internet Settings� ProxyEnableZ ProxyServerr�rrRz ^([^/:]+)://z%s://%srZzhttp:r�z http://%sz https://%sr�zftp://%sr�) �winreg� ImportError�OpenKey�HKEY_CURRENT_USER� QueryValueExr�rBrPrZClosermrBr�)rrG�internetSettings� proxyEnableZ proxyServer�pr�ZaddressrLrLrM�getproxies_registryZ s8          rOcCs t�p t�S)N)r/rOrLrLrLrMr5� sc &Cs~y ddl}Wntk r dSXy6|j|jd�}|j|d�d}t|j|d�d�}Wntk rldSX| sz| r~dSt|�\}}|g}y tj |�}||kr�|j |�Wntk r�YnXy tj |�}||kr�|j |�Wntk �r�YnX|j d�}xp|D]h} | dk�r*d|k�r*dS| j dd �} | j d d �} | j d d�} x$|D]} tj| | tj��rTdS�qTW�qWdS) Nrz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsrFZ ProxyOverriderzr2rRz\.r1z.*�?)rGrHrIrJrKr�rmr r�r�r]ZgetfqdnrBr�rPrrR) rvrGrLrMZ proxyOverrideZrawHostr.ZaddrZfqdnr2r�rLrLrM�proxy_bypass_registry� sR              rQcCs t�}|rt||�St|�SdS)N)r/r6rQ)rvrrLrLrMr� s )NNN)N)~rr�r�reZ http.clientr�r�rWr/rPr�rr�rc� collectionsrZrTr?Z urllib.errorrrrZ urllib.parserrrrr r r r r rrrrrrrrrZurllib.responserrrDrHrC�__all__� version_infor�rFr�r0r1r\r6r7rQ�ASCIIrrrwrrr2rr/rrrrr r!r"r#r$r%�urandomrdr&r'r(ryr)r�r�rEr]rr.r\r^r*r�r+r,r-r�r[Z nturl2pathr4r3r�r8r9rr�rr�rrrrr�r/r6r@�platformZ_scproxyrBrCrDrErr5rOrQrLrLrLrM�Ts�P   T ?n$q*@ o  v  +3:5! AW  _ #<    - 2