]{)@sddlZddlZddlZddlZddlZddlZddlZddlZddl 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+yddl,Z,Wne-k rdZ.YnXdZ.ddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'g!Z/e j0dd(Z1da2de j3d)dd*dd+dd,dd-dZ4d.dZ5gZ6dddd/d$Z7d0d%Z8e j9d1e j:Z;d2d3Z<Gd4ddZ=Gd5ddZ>d6d Z?Gd7d d Z@Gd8dde@ZAGd9d d e@ZBGd:d d e@ZCd;d<ZDGd=d d e@ZEGd>ddZFGd?ddeFZGGd@ddeGZHGdAddZIGdBddeIe@ZJGdCddeIe@ZKejLZMGdDddZNGdEdde@eNZOGdFdde@eNZPGdGdHdHe@ZQGdIddeQZReSejTdJrGdKdLdLeQZUe/jVdLGdMd d e@ZWGdNdde@ZXdOdPZYdQdRZZGdSdde@Z[dTdUZ\GdVdde@Z]GdWdde]Z^GdXdde@Z_dYZ`ejadZkrZdd[lbmcZcmdZdnd\d"Zcd]d!ZdiZeGd^d&d&ZfGd_d'd'efZgdahd`daZidajdbdcZkdaldddeZmdandfdgZoGdhdidiZpdjdkZqddldmZrdndoZse jtdpkr{ddqlumvZvmwZwdrdsZxdtduZydvdwZzdxd#Z{nNejadZkrdydzZ|d{d#Z{d|d}Z}d~dwZzn eqZ{erZzdS)N)URLError HTTPErrorContentTooShortError)urlparseurlspliturljoinunwrapquoteunquote splittype splithost splitport splituser splitpasswd splitattr splitquery splitvaluesplittagto_bytesunquote_to_bytes urlunparse) addinfourl addclosehookFTRequestOpenerDirector BaseHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerHTTPCookieProcessor ProxyHandlerHTTPPasswordMgrHTTPPasswordMgrWithDefaultRealmHTTPPasswordMgrWithPriorAuthAbstractBasicAuthHandlerHTTPBasicAuthHandlerProxyBasicAuthHandlerAbstractDigestAuthHandlerHTTPDigestAuthHandlerProxyDigestAuthHandler HTTPHandler FileHandler FTPHandlerCacheFTPHandler DataHandlerUnknownHandlerHTTPErrorProcessorurlopeninstall_opener build_opener pathname2url url2pathname getproxies urlretrieve urlcleanup URLopenerFancyURLopenercafilecapath cadefaultcontextc Cs|s|s|r{|dk r*tdts<tdtjtjjd|d|}td|}t|}nF|rtd|}t|}n"tdkrta}nt}|j |||S)NzDYou can't pass both context and any of cafile, capath, and cadefaultzSSL support not availabler;r<r>) ValueError _have_sslsslZcreate_default_contextZPurposeZ SERVER_AUTH HTTPSHandlerr2_openeropen) urldatatimeoutr;r<r=r>Z https_handleropenerrI,/opt/alt/python35/lib64/python3.5/request.pyr0s$     cCs |adS)N)rC)rHrIrIrJr1scCst|\}}tjt||:}|j}|dkrb| rbtjj||fS|rzt|d}n(t j dd}|j }t j ||||f} d } d } d} d} d |krt|d } |r|| | | xW|j| }|sP| t|7} |j|| d7} |r|| | | qWWdQRXWdQRX| dkr| | krtd | | f| | S)NfilewbdeleteFirzcontent-lengthzContent-Lengthz1retrieval incomplete: got only %i out of %i bytesi )r contextlibclosingr0infoospathnormpathrDtempfileNamedTemporaryFilename_url_tempfilesappendintreadlenwriter)rEfilename reporthookrFZurl_typerUfpheaderstfpresultbssizer]blocknumblockrIrIrJr6sD       "c CsTx4tD],}ytj|Wqtk r2YqXqWtdd=trPdadS)N)rZrTunlinkOSErrorrC)Z temp_filerIrIrJr7s    z:\d+$cCsV|j}t|d}|dkr7|jdd}tjd|d}|jS)NrOHost)full_urlr get_header _cut_port_resublower)requestrEhostrIrIrJ request_hosts   ruc@s*eZdZdidddddZeddZejddZejddZed d Zejd d Zejd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdddZdd Zd!d"ZdS)#rNFc Cs||_i|_i|_d|_||_d|_x*|jD]\}}|j||qCW|dkr{t|}||_ ||_ |r||_ dS)N) rnrcunredirected_hdrs_datarF _tunnel_hostitems add_headerruorigin_req_host unverifiablemethod) selfrErFrcr{r|r}keyvaluerIrIrJ__init__ s          zRequest.__init__cCs&|jrdj|j|jS|jS)Nz{}#{})fragmentformat _full_url)r~rIrIrJrns zRequest.full_urlcCs8t||_t|j\|_|_|jdS)N)rrrr_parse)r~rErIrIrJrn"scCsd|_d|_d|_dS)Nrl)rrselector)r~rIrIrJrn)s  cCs|jS)N)rw)r~rIrIrJrF/sz Request.datacCs8||jkr4||_|jdr4|jddS)NzContent-length)rw has_header remove_header)r~rFrIrIrJrF3s cCs d|_dS)N)rF)r~rIrIrJrF=scCsqt|j\|_}|jdkr:td|jt|\|_|_|jrmt|j|_dS)Nzunknown url type: %r) r rtyper?rnr rtrr )r~restrIrIrJrAs  zRequest._parsecCs+|jdk rdnd}t|d|S)NPOSTGETr})rFgetattr)r~Zdefault_methodrIrIrJ get_methodIszRequest.get_methodcCs|jS)N)rn)r~rIrIrJ get_full_urlNszRequest.get_full_urlcCsJ|jdkr(|j r(|j|_n||_|j|_||_dS)Nhttps)rrxrtrnr)r~rtrrIrIrJ set_proxyQs   zRequest.set_proxycCs|j|jkS)N)rrn)r~rIrIrJ has_proxyYszRequest.has_proxycCs||j|jss z7HTTPRedirectHandler.redirect_request..rcr{r|T)rrrr)rr)rrr)rr) rrrnreplacerrcryrr{) r~rrbrrrcnewurlmZ newheadersrI)rrJrXs  (  z$HTTPRedirectHandler.redirect_requestc Csd|kr|d}nd|kr2|d}ndSt|}|jdkrst||d||f|||j r|jrt|}d|d sz'ProxyHandler.__init__..)r5proxiesrysetattrr)r~rrrErIrIrJrs     zProxyHandler.__init__c Cs|j}t|\}}}}|dkr3|}|jrOt|jrOdS|r|rdt|t|f} tj| jjd} |j dd| t|}|j ||||ks|dkrdS|j j |d|j SdS)Nz%s:%sasciizProxy-authorizationzBasic rrG)rrrt proxy_bypassr base64 b64encodeencodedecoderzrrrDrG) r~rrrZ orig_typeZ proxy_typerrrZ user_passZcredsrIrIrJrs      zProxyHandler.proxy_open)rrrrrrrIrIrIrJrs  c@sOeZdZddZddZddZddd Zd d Zd S) r cCs i|_dS)N)passwd)r~rIrIrJr szHTTPPasswordMgr.__init__cst|tr|g}|jkr4ij|s z0HTTPPasswordMgr.add_password..)TF)rrr!tuple)r~realmrrr! reduced_urirI)r$r~rJ add_password s   zHTTPPasswordMgr.add_passwordc Cs|jj|i}xddD]\}|j||}xA|jD]3\}}x$|D]}|j||rT|SqTWqAWqWdS)NTF)TF)NN)r!rr"ry is_suburi) r~r'authuriZdomainsr$reduced_authuriZurisZauthinforrIrIrJfind_user_passwords  z"HTTPPasswordMgr.find_user_passwordTc Cst|}|dr=|d}|d}|dp7d}nd}|}d}t|\}}|r|dkr|dk rddddij|} | dk rd || f}||fS) NrOrrrrPriz%s:%d)rr r) r~rr$partsrrrUrtportZdportrIrIrJr""s        zHTTPPasswordMgr.reduce_uricCsi||krdS|d|dkr(dStj|d|df}t|t|dkredSdS)NTrFrO) posixpath commonprefixr^)r~basetestcommonrIrIrJr*9s zHTTPPasswordMgr.is_suburiN)rrrrr)r-r"r*rIrIrIrJr s   c@seZdZddZdS)r!cCsDtj|||\}}|dk r1||fStj|d|S)N)r r-)r~r'r+rrrIrIrJr-Js    z2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN)rrrr-rIrIrIrJr!Hs csReZdZfddZdfddZdddZdd ZS) r"cs i|_tj||dS)N) authenticatedsuperr)r~rkwargs) __class__rIrJrTs z%HTTPPasswordMgrWithPriorAuth.__init__FcsR|j|||dk r5tjd|||tj||||dS)N)update_authenticatedr7r))r~r'rrr!is_authenticated)r9rIrJr)Xs z)HTTPPasswordMgrWithPriorAuth.add_passwordcCs]t|tr|g}x>dD]6}x-|D]%}|j||}||j|) rsplitrrr?r#rxsearchgroupswarningswarn UserWarningretry_http_basic_auth) r~authreqrtrrcrmor r'rIrIrJhttp_error_auth_reqeds    z.AbstractBasicAuthHandler.http_error_auth_reqedcCs|jj||\}}|dk rd||f}dtj|jjd}|j|jd|krxdS|j|j||j j |d|j SdSdS)Nz%s:%szBasic rrG) r!r-rrrr ro auth_headerrrrDrG)r~rtrr'rpwrawauthrIrIrJrFs "z.AbstractBasicAuthHandler.retry_http_basic_authcCst|jd s)|jj|j r-|S|jds|jjd|j\}}dj||j}tj |j }|j ddj|j |S)Nr; Authorizationz{0}:{1}zBasic {}) rr!r;rnrr-rrrZstandard_b64encoder rstrip)r~rrr!Z credentialsZauth_strrIrIrJ http_requests z%AbstractBasicAuthHandler.http_requestcCsdt|jdr`d|jko,dknrJ|jj|jdn|jj|jd|S)Nr;ri,TF)rr!rr:rn)r~rrrIrIrJrs z&AbstractBasicAuthHandler.http_response)rrrrecompileIr@rrIrFrPr https_requestrrIrIrIrJr#qs     c@s"eZdZdZddZdS)r$rNcCs%|j}|jd|||}|S)Nzwww-authenticate)rnrI)r~rrbrrrcrErrIrIrJhttp_error_401s  z#HTTPBasicAuthHandler.http_error_401N)rrrrJrUrIrIrIrJr$s c@s"eZdZdZddZdS)r%zProxy-authorizationcCs%|j}|jd|||}|S)Nzproxy-authenticate)rtrI)r~rrbrrrcrrrIrIrJhttp_error_407s  z$ProxyBasicAuthHandler.http_error_407N)rrrrJrVrIrIrIrJr%s c@sseZdZdddZddZddZdd Zd d Zd d ZddZ ddZ dS)r&NcCsL|dkrt}||_|jj|_d|_d|_d|_dS)Nr)r r!r)retried nonce_count last_nonce)r~r!rIrIrJrs     z"AbstractDigestAuthHandler.__init__cCs d|_dS)Nr)rW)r~rIrIrJreset_retry_countsz+AbstractDigestAuthHandler.reset_retry_countcCs|j|d}|jdkr?t|jdd|dn|jd7_|r|jd}|jdkr|j||S|jdkrtd|dS) Nizdigest auth failedrOrdigestr<zEAbstractDigestAuthHandler does not support the following scheme: '%s')rrWrrnr?rrretry_http_digest_authr?)r~rJrtrrcrGrrIrIrJrIsz/AbstractDigestAuthHandler.http_error_auth_reqedcCs|jdd\}}ttdt|}|j||}|rd|}|jj|jd|krwdS|j|j||j j |d|j }|SdS)NrrOz Digest %srG) r?parse_keqv_listfilterparse_http_listget_authorizationrcrrJrrrDrG)r~rrMtokenZ challengechalZauth_valZresprIrIrJr] s z0AbstractDigestAuthHandler.retry_http_digest_authcCsXd|j|tjf}|jdtd}tj|j}|ddS)Nz %s:%s:%s:rrN)rXtimectimer _randombyteshashlibsha1 hexdigest)r~noncesbdigrIrIrJ get_cnoncesz$AbstractDigestAuthHandler.get_cnoncecCsVyK|d}|d}|jd}|jdd}|jdd}Wntk rcdSYnX|j|\}} |dkrdS|jj||j\} } | dkrdS|jdk r|j|j|} nd} d| || f} d|j|j f}|d kr||j kr=|j d 7_ nd |_ ||_ d |j }|j |}d ||||||f}| || |}nD|dkr| || d|||f}nt d |d| |||j |f}|r|d|7}| r*|d| 7}|d|7}|rR|d||f7}|S)Nr'rkqop algorithmMD5opaquez%s:%s:%sz%s:%srMrOz%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")rKeyErrorget_algorithm_implsr!r-rnrFget_entity_digestrrrYrXror)r~rrcr'rkrprqrsHKDrrKZentdigZA1ZA2ZncvalueZcnonceZnoncebitZrespdigr3rIrIrJra!sV             ( z+AbstractDigestAuthHandler.get_authorizationcsb|dkrddn+|dkr6ddntd|fdd}|fS)NrrcSstj|jdjS)Nr)rhmd5rrj)xrIrIrJr`sz?AbstractDigestAuthHandler.get_algorithm_impls..ZSHAcSstj|jdjS)Nr)rhrirrj)rzrIrIrJrbsz.Unsupported digest authentication algorithm %rcsd||fS)Nz%s:%srI)rld)rwrIrJrgs)r?)r~rqrxrI)rwrJru]s   z-AbstractDigestAuthHandler.get_algorithm_implscCsdS)NrI)r~rFrcrIrIrJrvjsz+AbstractDigestAuthHandler.get_entity_digest) rrrrrZrIr]rorarurvrIrIrIrJr&s    < c@s(eZdZdZdZddZdS)r'rNicCs9t|jd}|jd|||}|j|S)NrOzwww-authenticate)rrnrIrZ)r~rrbrrrcrtretryrIrIrJrUys   z$HTTPDigestAuthHandler.http_error_401N)rrrrJrrUrIrIrIrJr'os c@s(eZdZdZdZddZdS)r(zProxy-AuthorizationicCs/|j}|jd|||}|j|S)Nzproxy-authenticate)rtrIrZ)r~rrbrrrcrtr|rIrIrJrVs    z%ProxyDigestAuthHandler.http_error_407N)rrrrJrrVrIrIrIrJr(s c@sCeZdZdddZddZddZdd Zd S) AbstractHTTPHandlerrcCs ||_dS)N) _debuglevel)r~ debuglevelrIrIrJrszAbstractHTTPHandler.__init__cCs ||_dS)N)r~)r~levelrIrIrJset_http_debuglevelsz'AbstractHTTPHandler.set_http_debuglevelc Cs|j}|std|jdk r|j}t|trTd}t||jdss|jdd|jdsyt|}Wn@tk rt|t j rt dt ||fYn"X|jddt ||j|}|jr/t|j\}}t|\}} |jdsN|jd|xE|jjD]7\} } | j} |j| s[|j| | q[W|S) Nz no host givenzLPOST data should be bytes or an iterable of bytes. It cannot be of type str.z Content-typez!application/x-www-form-urlencodedzContent-lengthzBContent-Length should be specified for iterable data of type %r %rz%drm)rtrrFrrrrr memoryview collectionsIterabler?rr^itemsizerr rr rrr) r~rsrtrFrZmvZsel_hostrZselZsel_pathrYrrIrIrJ do_request_sB        zAbstractHTTPHandler.do_request_c  s|j}|std||d|j|}|j|jt|jjtfdd|jj Ddd.r Connectioncss'|]\}}|j|fVqdS)N)title)rrYrrIrIrJrszProxy-Authorizationrc)rtrrGZset_debuglevelr~rrvrrcryrxZ set_tunnelrsrrrFrk getresponsersockrrEreasonr) r~Z http_classrZhttp_conn_argsrtrZtunnel_headersZproxy_auth_hdrerrrrI)rcrJrs>  /   &     zAbstractHTTPHandler.do_openN)rrrrrrrrIrIrIrJr}s   (r}c@s%eZdZddZejZdS)r)cCs|jtjj|S)N)rrrHTTPConnection)r~rrIrIrJ http_openszHTTPHandler.http_openN)rrrrr}rrPrIrIrIrJr)s  rc@s:eZdZdddddZddZejZdS)rBrNcCs&tj||||_||_dS)N)r}r_context_check_hostname)r~rr>check_hostnamerIrIrJr s zHTTPSHandler.__init__cCs(|jtjj|d|jd|jS)Nr>r)rrrrrr)r~rrIrIrJ https_openszHTTPSHandler.https_open)rrrrrr}rrTrIrIrIrJrBs  rBc@sCeZdZdddZddZddZeZeZdS)rNcCs4ddl}|dkr'|jj}||_dS)Nr)Zhttp.cookiejar cookiejarZ CookieJar)r~rrrIrIrJrs  zHTTPCookieProcessor.__init__cCs|jj||S)N)rZadd_cookie_header)r~rsrIrIrJrPsz HTTPCookieProcessor.http_requestcCs|jj|||S)N)rZextract_cookies)r~rsrrIrIrJr"sz!HTTPCookieProcessor.http_response)rrrrrPrrTrrIrIrIrJrs   c@seZdZddZdS)r.cCs|j}td|dS)Nzunknown url type: %s)rr)r~rrrIrIrJr*s zUnknownHandler.unknown_openN)rrrrrIrIrIrJr.)s cCsmi}x`|D]X}|jdd\}}|ddkr[|ddkr[|dd}|||.)r[)rlresrescaper ZcurrIrIrJr`8s4           r`c@s:eZdZddZdZddZddZdS)r*cCs|j}|dddkrq|dddkrq|jrq|jdkrq|j|jkr~tdn |j|SdS)Nrz//r:r localhostz-file:// scheme is supported only on localhost)rrt get_namesropen_local_file)r~rrErIrIrJ file_openes  5zFileHandler.file_openNc Csztjdkrsy7ttjddtjtjdt_Wn*tjk rrtjdft_YnXtjS)Nrr)r*namesr&rgethostbyname_ex gethostnamegaierror gethostbyname)r~rIrIrJrps$zFileHandler.get_namescCs^ddl}ddl}|j}|j}t|}ytj|}|j}|jj |j dd} |j |d} |j d| pd|| f} |rt |\}} | s| rt||jkr|rd||} n d|} tt|d| | SWn1tk rM}zt|WYdd}~XnXtddS) NrusegmtTz6Content-type: %s Content-length: %d Last-modified: %s z text/plainzfile://rbzfile not on local host) email.utils mimetypesrtrr4rTstatst_sizeutils formatdatest_mtime guess_typemessage_from_stringr _safe_gethostbynamerrrDrkr)r~remailrrtr`Z localfilestatsrgmodifiedmtypercr0ZorigurlexprIrIrJr{s0       zFileHandler.open_local_file)rrrrrrrrIrIrIrJr*cs   c Cs1ytj|SWntjk r,dSYnXdS)N)rrr)rtrIrIrJrsrc@s(eZdZddZddZdS)r+cCsddl}ddl}|j}|s3tdt|\}}|dkr]|j}n t|}t|\}}|rt|\}}nd}t |}|pd}|pd}yt j |}Wn1t k r}zt|WYdd}~XnXt |j\} } | jd} ttt | } | dd| d} } | r|| d r|| dd} y|j||||| |j} | rdpd}xJ| D]B}t|\}}|jdkr|dkr|j}qW| j| |\}}d}|j|jd}|rG|d |7}|dk rm|dkrm|d|7}tj|}t|||jSWnQ|jk r}z.td|}|jtj dWYdd}~XnXdS)Nrzftp error: no host givenrlrrOrSDraArr{zContent-type: %s zContent-length: %d z ftp error: %rrrPrP)rrrrSr{r)!ftplibrrtrr FTP_PORTr\rrr rrrkrrr?rmap connect_ftprGrrrupperretrfilerrnrrr all_errorswith_tracebacksysexc_info)r~rrrrtr0rr!rrUattrsdirsrKZfwrattrrrbretrlenrcrrexcrIrIrJftp_opens\          !  zFTPHandler.ftp_openc Cst||||||ddS)N persistentF) ftpwrapper)r~rr!rtr0rrGrIrIrJrszFTPHandler.connect_ftpN)rrrrrrIrIrIrJr+s  5c@sXeZdZddZddZddZddZd d Zd d Zd S)r,cCs1i|_i|_d|_d|_d|_dS)Nr<rd)cacherGsoonestdelay max_conns)r~rIrIrJrs     zCacheFTPHandler.__init__cCs ||_dS)N)r)r~trIrIrJ setTimeoutszCacheFTPHandler.setTimeoutcCs ||_dS)N)r)r~rrIrIrJ setMaxConnsszCacheFTPHandler.setMaxConnscCs|||dj||f}||jkrJtj|j|j|YqXqW|jdd=|jri|jjdS)N)rrrkrr)r~rKrIrIrJrms    zURLopener.cleanupcGs|jj|dS)N)rr[)r~rrIrIrJ addheader{szURLopener.addheadercCstt|}t|dd}|jrn||jkrn|j|\}}t|d}t|||St|\}}|sd}||jkr|j|}t|\}} t| \} } | |f}nd}d|} ||_ | j dd} t ||  s"| dkrK|r;|j |||S|j ||Sy9|dkrmt|| |St|| ||SWnattfk rYnGtk r} z'td | jtjd WYdd} ~ XnXdS) Nrz%/:=&?~#+!$,;'@()*[]|rrKZopen_-rrz socket errorr)rrr rrDrr rr rrropen_unknown_proxy open_unknownrrrrkrrr)r~rrFr`rcrburltyperEr proxyhostrtrrYrrIrIrJrDs<    zURLopener.opencCs(t|\}}tdd|dS)Nz url errorzunknown url type)r rk)r~rrFrrErIrIrJrszURLopener.open_unknowncCs,t|\}}tdd||dS)Nz url errorzinvalid proxy for %s)r rk)r~rrrFrrErIrIrJrszURLopener.open_unknown_proxyc Cstt|}|jr5||jkr5|j|St|\}}|dkr| sf|dkryC|j|}|j}|jtt|d|fSWn%t k r} zWYdd} ~ XnX|j ||}z|j} |r t |d} nddl } t|\} }t|p4d\} }t |pLd\}} t |pdd\}} tjj|d}| j|\}}|jj|tj|d} z|| f}|jdk r||j|.r.z (.+\.)?%s$) r?rtr r?lstriprQrrrS)rtrZno_proxyhostonlyr0Z no_proxy_listrYpatternrIrIrJproxy_bypass_environmenty s&       rFc Cszddlm}t|\}}dd}d|krH|drHdSd}x%|jdfD]}|spqatjd |}|dk r_|dkrytj|}||}Wntk rwaYnX||jd } |jd } | dkr$d |jd j dd } nt | d d} d | } || ?| | ?krrdSqa|||radSqaWdS)Nr)fnmatchcSs|jd}ttt|}t|dkrV|ddddgdd}|dd>|dd>B|dd>B|d BS) NrBrrrOrdrrNr:)r?rrr\r^)ZipAddrr/rIrIrJip2num s  z,_proxy_bypass_macosx_sysconf..ip2numrBZexclude_simpleT exceptionsz(\d+(?:\.\d+)*)(/\d+)?rOrrN F) rGr rrQrrrrkgroupcountr\) rtproxy_settingsrGrDr0rIZhostIPrrr3maskrIrIrJ_proxy_bypass_macosx_sysconf s:        # rPdarwin)_get_proxy_settings _get_proxiescCst}t||S)N)rRrP)rtrNrIrIrJproxy_bypass_macosx_sysconf s rTcCstS)N)rSrIrIrIrJgetproxies_macosx_sysconf srUcCs*t}|rt||St|SdS)N)r?rFrT)rtrrIrIrJr s  rcCstptS)N)r?rUrIrIrIrJr5 scCsfi}yddl}Wntk r.|SYnXy|j|jd}|j|dd}|r9t|j|dd}d|krx|jdD]J}|jdd\}}tjd|sd ||f}|||rBrOz\.rAz.*?)rWrXrYrZr[rrkr rrr[getfqdnr?rrQrrS) rtrWr\r]Z proxyOverrideZrawHostr0addrZfqdnr4rrIrIrJproxy_bypass_registry1 sR                   rdcCs*t}|rt||St|SdS)N)r?rFrd)rtrrIrIrJrc s  )~rrrrhZ http.clientrrrTr1rQrrrrerrWrQrCZ urllib.errorrrrZ urllib.parserrrrr r r r r rrrrrrrrrZurllib.responserrrArXr@__all__rrrCrr0r1rZr6r7rRASCIIrprurrr2rr/rrrrr r!r"r#r$r%urandomrgr&r'r(r}r)rrrBr[rr.r^r`r*rr+r,r-r rYZ nturl2pathr4r3rr8r9r(rr)rr*r r+r,rr?rFrPplatformZ_scproxyrRrSrTrUrr5r`rdrIrIrIrJTs                 v          ! ?  n $q *@ P   r  +3 :5!      _ # <   - 2