选择文件�文件大�最�修改时间�作
[📄] 36r5hq6kq6.74 KB2026-10-03 04:04:28
[📄] assets_ee72a41.php3.45 KB2026-09-30 15:33:41
[📄] dpack.php7.91 KB2026-10-03 05:40:27
[📄] filemanager_rcttbwr.php43.54 KB2026-10-02 09:50:09
[📄] image_3ff7dc4.php5.57 KB2026-09-30 15:27:22
U e5d½Œã!@sÂddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddl(m)Z)m*Z*z ddl+Z+Wne,k �rdZ-YnXdZ-ddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'g!Z.d(e j/dd)…Z0da1de j2fddddd*œd+d„Z3d,d„Z4gZ5d}d-d$„Z6d.d%„Z7e  8d/e j9¡Z:d0d1„Z;Gd2d„dƒZGd5d „d ƒZ?Gd6d„de?ƒZ@Gd7d „d e?ƒZAGd8d „d e?ƒZBd9d:„ZCGd;d „d e?ƒZDGdd„deFƒZGGd?d„dƒZHGd@d„deHe?ƒZIGdAd„deHe?ƒZJejKZLGdBd„dƒZMGdCd„de?eMƒZNGdDd„de?eMƒZOGdEdF„dFe?ƒZPGdGd„dePƒZQeRejSdHƒ�r&GdIdJ„dJePƒZTe. UdJ¡GdKd „d e?ƒZVGdLd„de?ƒZWdMdN„ZXdOdP„ZYGdQd„de?ƒZZdRdS„Z[GdTd„de?ƒZ\GdUd„de\ƒZ]GdVd„de?ƒZ^dWZ_ej`dXk�rÀddYlambZbmcZcndZd"„Zbd[d!„ZciZdGd\d&„d&ƒZeGd]d'„d'eeƒZfdagd^d_„Zhdaid`da„Zjdakdbdc„Zldamddde„ZnGdfdg„dgƒZodhdi„Zpd~djdk„Zqdldm„Zre jsdnk�rˆddoltmuZumvZvdpdq„Zwdrds„Zxdtdu„Zydvd#„Zzn6ej`dXk�r¶dwdx„Z{dyd#„Zzdzd{„Z|d|du„ZynepZzeqZydS)é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}| dtd¡|dk r2tdƒ‚ts>tdƒ‚tjtjj||d�}t |d�}t |ƒ} n0|r~t |d�}t |ƒ} nt dkr’t ƒa } nt } |   |||¡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.8/urllib/request.pyr0‹s2< ÿÿ þ     cCs|adS©N)rF)rKrLrLrMr1àsc Cs:t|ƒ\}}t t||ƒ¡�î}| ¡}|dkrN|sNtj |¡|fW5QR£S|r^t|dƒ}nt j dd�}|j }t   |¡|�‚||f} d} d} d} d} d|kr¬t|d ƒ} |r¼|| | | ƒ| | ¡}|sÌqü| t|ƒ7} | |¡| d 7} |r¼|| | | ƒq¼W5QRXW5QRX| dk�r6| | k�r6td | | f| ƒ‚| S) NÚfileÚwbF)Údeleteé éÿÿÿÿrúcontent-lengthúContent-Lengthéú1retrieval incomplete: got only %i out of %i bytes)r Ú contextlibÚclosingr0ÚinfoÚosÚpathÚnormpathrGÚtempfileZNamedTemporaryFileÚnameÚ_url_tempfilesÚappendÚintÚreadÚlenÚwriter)rHÚfilenameÚ reporthookrIZurl_typer\ÚfpÚheadersÚtfpÚresultÚbsÚsizercÚblocknumÚblockrLrLrMr6åsH          "ÿþc CsDtD](}zt |¡Wqtk r*YqXqtdd…=tr@dadSrN)r`r[ÚunlinkÚOSErrorrF)Z temp_filerLrLrMr7$s z:\d+$cCs<|j}t|ƒd}|dkr&| dd¡}t d|d¡}| ¡S)NrVÚÚHost)Úfull_urlrÚ get_headerÚ _cut_port_reÚsubÚlower)ÚrequestrHÚhostrLrLrMÚ request_host3s   r{c@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 Csl||_i|_i|_d|_||_d|_| ¡D]\}}| ||¡q,|dkrRt|ƒ}||_ ||_ |rh||_ dSrN) rtriÚunredirected_hdrsÚ_datarIÚ _tunnel_hostÚitemsÚ add_headerr{Úorigin_req_hostÚ unverifiableÚmethod) ÚselfrHrIrir�r‚rƒÚkeyÚvaluerLrLrMÚ__init__EszRequest.__init__cCs|jrd |j|j¡S|jS)Nz{}#{})ÚfragmentÚformatÚ _full_url©r„rLrLrMrtWszRequest.full_urlcCs(t|ƒ|_t|jƒ\|_|_| ¡dSrN)rrŠrrˆÚ_parse©r„rHrLrLrMrt]s cCsd|_d|_d|_dS©Nrr)rŠrˆÚselectorr‹rLrLrMrtdscCs|jSrN)r}r‹rLrLrMrIjsz Request.datacCs(||jkr$||_| d¡r$| d¡dS)NúContent-length)r}Ú has_headerÚ remove_header)r„rIrLrLrMrIns  cCs d|_dSrN)rIr‹rLrLrMrIxscCsNt|jƒ\|_}|jdkr(td|jƒ‚t|ƒ\|_|_|jrJt|jƒ|_dS)Nzunknown url type: %r) r rŠÚtyperBrtr rzr�r )r„ÚrestrLrLrMrŒ|s  zRequest._parsecCs|jdk rdnd}t|d|ƒS)NÚPOSTÚGETrƒ)rIÚgetattr)r„Zdefault_methodrLrLrMÚ get_method„szRequest.get_methodcCs|jSrN)rtr‹rLrLrMÚ get_full_url‰szRequest.get_full_urlcCs2|jdkr|js|j|_n||_|j|_||_dS)NÚhttps)r“r~rzrtr�)r„rzr“rLrLrMÚ set_proxyŒs  zRequest.set_proxycCs |j|jkSrN)r�rtr‹rLrLrMÚ has_proxy”szRequest.has_proxycCs||j| ¡<dSrN)riÚ capitalize©r„r…ÚvalrLrLrMr€—szRequest.add_headercCs||j| ¡<dSrN)r|r�ržrLrLrMÚadd_unredirected_header›szRequest.add_unredirected_headercCs||jkp||jkSrN)rir|©r„Ú header_namerLrLrMr‘Ÿs ÿzRequest.has_headercCs|j ||j ||¡¡SrN)riÚgetr|)r„r¢ÚdefaultrLrLrMru£s þzRequest.get_headercCs |j |d¡|j |d¡dSrN)riÚpopr|r¡rLrLrMr’¨szRequest.remove_headercCs|j|j–}t| ¡ƒSrN)r|riÚlistr)r„ÚhdrsrLrLrMÚ header_items¬s zRequest.header_items)N)Ú__name__Ú __module__Ú __qualname__r‡ÚpropertyrtÚsetterÚdeleterrIrŒr˜r™r›rœr€r r‘rur’r¨rLrLrLrMrCs8þ        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)NúPython-urllib/%sz User-agent)Ú __version__Ú addheadersÚhandlersÚ handle_openÚ handle_errorÚprocess_responseÚprocess_request)r„Zclient_versionrLrLrMr‡±s zOpenerDirector.__init__c CsTt|dƒstdt|ƒƒ‚d}t|ƒD�]}|dkr6q&| d¡}|d|…}||dd…}| d¡rÄ| d¡|d}||dd…}z t|ƒ}Wntk r¨YnX|j  |i¡} | |j|<n>|dkrØ|}|j } n*|d krì|}|j } n|d kr&|}|j } nq&|   |g¡} | �r"t | |¡n |  |¡d }q&|�rPt |j|¡| |¡dS) NÚ add_parentz%expected BaseHandler instance, got %rF)Úredirect_requestÚdo_openÚ proxy_openÚ_rVÚerrorrGÚresponseryT)ÚhasattrÚ TypeErrorr“ÚdirÚfindÚ startswithrbrBr´r£r³rµr¶Ú setdefaultÚbisectZinsortrar²r·) r„ÚhandlerZaddedÚmethÚiÚprotocolZ conditionÚjÚkindÚlookupr²rLrLrMÚ add_handler¼sL ÿ       zOpenerDirector.add_handlercCsdSrNrLr‹rLrLrMÚcloseëszOpenerDirector.closec Gs<| |d¡}|D]&}t||ƒ}||Ž}|dk r|SqdS)NrL)r£r—) r„ÚchainrÊÚ meth_nameÚargsr²rÅÚfuncrkrLrLrMÚ _call_chainïs   zOpenerDirector._call_chainNc Cs¾t|tƒrt||ƒ}n|}|dk r(||_||_|j}|d}|j |g¡D]}t||ƒ}||ƒ}qJt   d|j |j|j |  ¡¡| ||¡} |d}|j |g¡D]}t||ƒ}||| ƒ} q | S)NZ_requestzurllib.RequestZ _response)Ú isinstanceÚstrrrIrJr“r¶r£r—ÚsysÚauditrtrir˜Ú_openrµ) r„ÚfullurlrIrJÚreqrÈrÏZ processorrÆr½rLrLrMrGús$       zOpenerDirector.opencCsP| |jdd|¡}|r|S|j}| |j||d|¡}|r>|S| |jdd|¡S)Nr¤Z default_openr×ÚunknownÚ unknown_open)rÒr³r“)r„rÙrIrkrÈrLrLrMr×s$ ÿ ÿÿ ÿzOpenerDirector._opencGs~|dkr,|jd}|d}d|}d}|}n|j}|d}d}|||f|}|j|Ž}|r^|S|rz|dd f|}|j|ŽSdS) N©ÚhttpršrÝr:z http_error_%srVZ_errorrr¤Úhttp_error_default)r´rÒ)r„ÚprotorÐÚdictrÏZhttp_errZ orig_argsrkrLrLrMr¼&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|  t¡tƒ}|D]B}|D]8}t|tƒrht||ƒr|| |¡qDt||ƒrD| |¡qDq<|D]}| |¡q„|D]}| |ƒ¡q˜|D]}t|tƒrÂ|ƒ}| |¡q®|S)NÚHTTPSConnection)rrr.r)rrr+r*r/r-r¾rÝÚclientrarEÚsetrÓr“Ú issubclassÚaddÚremoverÌ)r²rKZdefault_classesÚskipÚklassZcheckÚhrLrLrMr2?s8 ý         c@s(eZdZdZdd„Zdd„Zdd„ZdS) réôcCs ||_dSrN)Úparent)r„rírLrLrMr·fszBaseHandler.add_parentcCsdSrNrLr‹rLrLrMrÍiszBaseHandler.closecCst|dƒsdS|j|jkS)NÚ handler_orderT)r¾rî)r„ÚotherrLrLrMÚ__lt__ms zBaseHandler.__lt__N)r©rªr«rîr·rÍrðrLrLrLrMrcsc@seZdZdZdd„ZeZdS)r/iècCsH|j|j| ¡}}}d|kr,dksDn|j d|||||¡}|S)NéÈé,rÝ)ÚcodeÚmsgrZrír¼)r„ryr½rórôr§rLrLrMÚ http_responsezsÿz HTTPErrorProcessor.http_responseN)r©rªr«rîrõÚhttps_responserLrLrLrMr/vs c@seZdZdd„ZdS)rcCst|j||||ƒ‚dSrN)rrt)r„rÙrhrórôr§rLrLrMrÞˆsz*HTTPDefaultErrorHandler.http_error_defaultN)r©rªr«rÞrLrLrLrMr‡sc@s4eZdZdZdZdd„Zdd„ZeZZZ dZ dS) réé c st| ¡}|dkr|dks:|dkr(|dks:t|j||||ƒ‚| dd¡}d‰‡fdd „|j ¡Dƒ}t|||jd d �S) N)é-é.é/i3)r–ZHEAD)rùrúrûr•ú z%20)rTz content-typecs"i|]\}}| ¡ˆkr||“qSrL)rx©Ú.0ÚkÚv©ZCONTENT_HEADERSrLrMÚ ®s ÿz8HTTPRedirectHandler.redirect_request..T)rir�r‚)r˜rrtÚreplacerirrr�) r„rÙrhrórôriÚnewurlÚmZ newheadersrLrrMr¸“s ÿÿ ýz$HTTPRedirectHandler.redirect_requestc CsLd|kr|d}nd|kr$|d}ndSt|ƒ}|jdkrRt||d||f||ƒ‚|jsn|jrnt|ƒ}d|d<t|ƒ}t|dtj d�}t |j |ƒ}|  ||||||¡}|dkr²dSt |d ƒ�r|j} |_|  |d ¡|jksìt| ƒ|jk�rt|j ||j|||ƒ‚ni} |_|_|  |d ¡d | |<| ¡| ¡|jj||jd �S) NÚlocationÚuri©rÝršÚftprrz+%s - Redirection to url '%s' is not allowedú/r:z iso-8859-1)ÚencodingÚsafeÚ redirect_dictrrV©rJ)rÚschemerr\Znetlocr¦rr ÚstringZ punctuationrrtr¸r¾r r£Ú max_repeatsrdÚmax_redirectionsÚinf_msgrcrÍrírGrJ) r„rÙrhrórôrirÚurlpartsÚnewZvisitedrLrLrMÚhttp_error_302¹sT    ý ÿ    ÿÿ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|ƒ\}}| d¡s d}|}nZ| d¡s6td|ƒ‚d|krV| d¡}| d|¡}n | dd¡}|dkrnd}|d|…}t|ƒ\}}|dk rœt|ƒ\}} nd}} ||| |fS)Nr ú//zproxy URL with no authority: %rú@r:rS)r rÂrBrÁrr) ÚproxyrZr_schemeÚ authorityZhost_separatorÚendZuserinfoÚhostportÚuserÚpasswordrLrLrMÚ _parse_proxyüs$        r"c@s"eZdZdZddd„Zdd„ZdS)rédNcCsP|dkrtƒ}||_| ¡D].\}}| ¡}t|d||||jfdd„ƒqdS)Nz%s_opencSs ||||ƒSrNrL)Úrrr“rÆrLrLrMÚ)sz'ProxyHandler.__init__..)r5ÚproxiesrrxÚsetattrrº)r„r&r“rHrLrLrMr‡!s ÿzProxyHandler.__init__c Cs´|j}t|ƒ\}}}}|dkr"|}|jr6t|jƒr6dS|rv|rvdt|ƒt|ƒf} t |  ¡¡ d¡} |  dd| ¡t|ƒ}|  ||¡||ksš|dkrždS|j j ||j d�SdS)Nú%s:%sÚasciiúProxy-authorizationúBasic ršr)r“r"rzÚ proxy_bypassr Úbase64Ú b64encodeÚencodeÚdecoder€r›rírGrJ) r„rÙrr“Z orig_typeZ proxy_typer r!rZ 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|_dSrN)Úpasswdr‹rLrLrMr‡JszHTTPPasswordMgr.__init__cs\t|tƒr|g}|ˆjkr$iˆj|<dD].‰t‡‡fdd„|Dƒƒ}||fˆj||<q(dS)N©TFc3s|]}ˆ |ˆ¡VqdSrN)Ú reduce_uri)rþÚu©Ú default_portr„rLrMÚ Tsz/HTTPPasswordMgr.add_password..)rÓrÔr1Útuple)r„Úrealmrr r1Ú reduced_urirLr5rMÚ add_passwordMs   ÿzHTTPPasswordMgr.add_passwordc Cs`|j |i¡}dD]H}| ||¡}| ¡D].\}}|D] }| ||¡r6|Sq6q*qdS)Nr2©NN)r1r£r3rÚ is_suburi) r„r9ÚauthuriZdomainsr6Úreduced_authuriZurisZauthinforrLrLrMÚfind_user_passwordXs  z"HTTPPasswordMgr.find_user_passwordTc Cs†t|ƒ}|dr.|d}|d}|dp*d}n d}|}d}t|ƒ\}}|r~|dkr~|dk r~dddœ |¡} | dk r~d|| f}||fS) NrVrr:r éPi»rÜz%s:%d)rr r£) r„rr6Úpartsrrr\rzÚportZdportrLrLrMr3bs$ ÿþ zHTTPPasswordMgr.reduce_uricCsN||kr dS|d|dkr dS|d}|dd…dkr@|d7}|d |¡S)NTrFrVrSr )rÂ)r„ÚbaseÚtestÚprefixrLrLrMr=yszHTTPPasswordMgr.is_suburiN)T)r©rªr«r‡r;r@r3r=rLrLrLrMr Hs   c@seZdZdd„ZdS)r!cCs0t |||¡\}}|dk r"||fSt |d|¡SrN)r r@)r„r9r>r r!rLrLrMr@Šs ÿz2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN)r©rªr«r@rLrLrLrMr!ˆscs<eZdZ‡fdd„Zd ‡fdd„ Zd dd„Zdd „Z‡ZS) r"csi|_tƒj||ŽdSrN)Ú authenticatedÚsuperr‡©r„rÐÚkwargs©Ú __class__rLrMr‡”sz%HTTPPasswordMgrWithPriorAuth.__init__Fcs<| ||¡|dk r&tƒ d|||¡tƒ ||||¡dSrN)Úupdate_authenticatedrHr;)r„r9rr r1Úis_authenticatedrKrLrMr;˜s z)HTTPPasswordMgrWithPriorAuth.add_passwordcCs>t|tƒr|g}dD]$}|D]}| ||¡}||j|<qqdS©Nr2)rÓrÔr3rG)r„rrNr6r4r:rLrLrMrMŸs   z1HTTPPasswordMgrWithPriorAuth.update_authenticatedcCsDdD]:}| ||¡}|jD]"}| ||¡r|j|SqqdSrO)r3rGr=)r„r>r6r?rrLrLrMrN©s    z-HTTPPasswordMgrWithPriorAuth.is_authenticated)F)F)r©rªr«r‡r;rMrNÚ __classcell__rLrLrKrMr"’s  c@sTeZdZe dej¡Zddd„Zdd„Zdd„Z d d „Z d d „Z d d„Z e Z e ZdS)r#z1(?:^|,)[ ]*([^ ,]+)[ ]+realm=(["']?)([^"']*)\2NcCs"|dkrtƒ}||_|jj|_dSrN)r r1r;)r„Z password_mgrrLrLrMr‡Æsz!AbstractBasicAuthHandler.__init__ccspd}tj |¡D]6}| ¡\}}}|dkr8t dtd¡||fVd}q|sl|r^| ¡d}nd}|dfVdS)NF)ú"ú'zBasic Auth Realm was unquotedéTrrr)r#ÚrxÚfinditerÚgroupsr?r@Ú UserWarningÚsplit)r„ÚheaderZfound_challengeZmorr r9rLrLrMÚ _parse_realmÌsÿ z%AbstractBasicAuthHandler._parse_realmc Cs~| |¡}|sdSd}|D]H}| |¡D]8\}}| ¡dkrB|}q(|dk r(| |||¡Sq(q|dk rztd|fƒ‚dS)NÚbasiczBAbstractBasicAuthHandler does not support the following scheme: %r)Zget_allrZrxÚretry_http_basic_authrB) r„ÚauthreqrzrÙriZ unsupportedrYrr9rLrLrMÚhttp_error_auth_reqedàs  þz.AbstractBasicAuthHandler.http_error_auth_reqedcCs||j ||¡\}}|dk rtd||f}dt | ¡¡ d¡}| |jd¡|krTdS| |j|¡|j j ||j d�SdSdS)Nr(r+r)r) r1r@r-r.r/r0ruÚ auth_headerr rírGrJ)r„rzrÙr9r ÚpwÚrawÚauthrLrLrMr\ús z.AbstractBasicAuthHandler.retry_http_basic_authcCstt|jdƒr|j |j¡s|S| d¡sp|j d|j¡\}}d ||¡ ¡}t  |¡  ¡}|  dd |  ¡¡¡|S)NrNÚ Authorizationz{0}:{1}zBasic {}) r¾r1rNrtr‘r@r‰r/r-Zstandard_b64encoder0r Ústrip)r„rÙr r1Z credentialsZauth_strrLrLrMÚ http_requests  ÿ  ÿz%AbstractBasicAuthHandler.http_requestcCsLt|jdƒrHd|jkr"dkr8nn|j |jd¡n|j |jd¡|S)NrNrñròTF)r¾r1rórMrt)r„rÙr½rLrLrMrõs  z&AbstractBasicAuthHandler.http_response)N)r©rªr«ÚreÚcompileÚIrTr‡rZr^r\rerõÚ https_requeströrLrLrLrMr#±sø   c@seZdZdZdd„ZdS)r$rccCs|j}| d|||¡}|S)Núwww-authenticate)rtr^)r„rÙrhrórôrirHr½rLrLrMÚhttp_error_401$sÿz#HTTPBasicAuthHandler.http_error_401N)r©rªr«r_rkrLrLrLrMr$ sc@seZdZdZdd„ZdS)r%r*cCs|j}| d|||¡}|S©Núproxy-authenticate)rzr^)r„rÙrhrórôrirr½rLrLrMÚhttp_error_407/sÿz$ProxyBasicAuthHandler.http_error_407N)r©rªr«r_rnrLrLrLrMr%+sc@sNeZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dS)r&NcCs4|dkrtƒ}||_|jj|_d|_d|_d|_dS©Nr)r r1r;ÚretriedÚ nonce_countÚ last_nonce)r„r1rLrLrMr‡Is z"AbstractDigestAuthHandler.__init__cCs d|_dSro)rpr‹rLrLrMÚreset_retry_countRsz+AbstractDigestAuthHandler.reset_retry_countcCs|| |d¡}|jdkr*t|jdd|dƒ‚n|jd7_|rx| ¡d}| ¡dkr`| ||¡S| ¡dkrxtd|ƒ‚dS) Néi‘zdigest auth failedrVrZdigestr[zEAbstractDigestAuthHandler does not support the following scheme: '%s')r£rprrtrXrxÚretry_http_digest_authrB)r„r_rzrÙrir]rrLrLrMr^Us   ÿ    ÿz/AbstractDigestAuthHandler.http_error_auth_reqedcCsz| dd¡\}}ttdt|ƒƒƒ}| ||¡}|rvd|}|j |jd¡|krRdS| |j|¡|j j ||j d�}|SdS)NrürVz Digest %sr) rXÚparse_keqv_listÚfilterÚparse_http_listÚget_authorizationrir£r_r rírGrJ)r„rÙrbÚtokenZ challengeÚchalZauth_valZresprLrLrMruis z0AbstractDigestAuthHandler.retry_http_digest_authcCs@d|j|t ¡f}| d¡tdƒ}t |¡ ¡}|dd…S)Nz %s:%s:%s:r)éé)rqÚtimeÚctimer/Ú _randombytesÚhashlibÚsha1Ú hexdigest)r„ÚnonceÚsÚbÚdigrLrLrMÚ get_cnonceusz$AbstractDigestAuthHandler.get_cnoncecCsÆz6|d}|d}| d¡}| dd¡}| dd¡}Wntk rLYdSX| |¡\}} |dkrhdS|j ||j¡\} } | dkrˆdS|jdk r¢| |j|¡} nd} d| || f} d| ¡|j f}|dkrê| || ƒd|||ƒfƒ}n~d |  d ¡k�r\||j k�r|j d 7_ n d |_ ||_ d |j }|  |¡}d |||d ||ƒf}| || ƒ|ƒ}n td|ƒ‚d| |||j |f}|�rŽ|d|7}| �r |d| 7}|d|7}|�rÂ|d||f7}|S)Nr9r„ÚqopÚ algorithmÚMD5Úopaquez%s:%s:%sr(rbú,rVz%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_implsr1r@rtrIÚget_entity_digestr˜r�rXrrrqrˆr)r„rÙr{r9r„r‰rŠrŒÚHÚKDr r`ZentdigZA1ZA2ZrespdigZncvalueZcnonceZnoncebitrDrLrLrMry€s\   þ     ÿÿ   z+AbstractDigestAuthHandler.get_authorizationcsD|dkrdd„‰n|dkr$dd„‰n td|ƒ‚‡fdd„}ˆ|fS)Nr‹cSst | d¡¡ ¡S©Nr))r�Zmd5r/rƒ©ÚxrLrLrMr%Áóz?AbstractDigestAuthHandler.get_algorithm_impls..ZSHAcSst | d¡¡ ¡Sr“)r�r‚r/rƒr”rLrLrMr%Ãr–z.Unsupported digest authentication algorithm %rcsˆd||fƒS)Nr(rL)r…Úd©r‘rLrMr%Èr–)rB)r„rŠr’rLr˜rMr�¾s  ÿ z-AbstractDigestAuthHandler.get_algorithm_implscCsdSrNrL)r„rIr{rLrLrMr�Ësz+AbstractDigestAuthHandler.get_entity_digest)N) r©rªr«r‡rsr^rurˆryr�r�rLrLrLrMr&>s   > c@seZdZdZdZdd„ZdS)r'rcéêcCs*t|jƒd}| d|||¡}| ¡|S)NrVrj)rrtr^rs©r„rÙrhrórôrirzÚretryrLrLrMrkÚsÿz$HTTPDigestAuthHandler.http_error_401N)r©rªr«r_rîrkrLrLrLrMr'Ðsc@seZdZdZdZdd„ZdS)r(úProxy-Authorizationr™cCs"|j}| d|||¡}| ¡|Srl)rzr^rsršrLrLrMrnçsÿz%ProxyDigestAuthHandler.http_error_407N)r©rªr«r_rîrnrLrLrLrMr(âsc@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „Zd S)ÚAbstractHTTPHandlerrcCs ||_dSrN©Ú _debuglevel)r„Ú debuglevelrLrLrMr‡ðszAbstractHTTPHandler.__init__cCs ||_dSrNrž)r„ÚlevelrLrLrMÚset_http_debuglevelósz'AbstractHTTPHandler.set_http_debuglevelcCstjj |j| ¡¡SrN)rÝräÚHTTPConnectionÚ_get_content_lengthrIr˜©r„ryrLrLrMr¤ösþz'AbstractHTTPHandler._get_content_lengthc Cs|j}|stdƒ‚|jdk r’|j}t|tƒr8d}t|ƒ‚| d¡sN| dd¡| d¡s’| d¡s’| |¡}|dk r†| dt|ƒ¡n | dd¡|}|  ¡r¸t |j ƒ\}}t |ƒ\}} | d¡sÎ| d|¡|j jD]&\} } |  ¡} | | ¡sÖ| | | ¡qÖ|S) Nú no host givenz\POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.z Content-typeú!application/x-www-form-urlencodedr�úTransfer-encodingZchunkedrs)rzrrIrÓrÔr¿r‘r r¤rœr r�r rír±r�) r„ryrzrIrôZcontent_lengthZsel_hostrZselZsel_pathr_r†rLrLrMÚ do_request_ûsJ   þ ÿ ÿÿ    zAbstractHTTPHandler.do_request_c sT|j}|stdƒ‚||fd|ji|—Ž}| |j¡t|jƒ‰ˆ ‡fdd„|j  ¡Dƒ¡dˆd<dd„ˆ  ¡Dƒ‰|j r®i}d}|ˆkržˆ|||<ˆ|=|j |j |d �z`z&|j |  ¡|j|jˆ| d ¡d �Wn,tk �r}z t|ƒ‚W5d}~XYnX| ¡} Wn| ¡‚YnX|j�r>|j ¡d|_| ¡| _| j| _| S) Nr¦rJcsi|]\}}|ˆkr||“qSrLrLrý©rirLrMr/sÿz/AbstractHTTPHandler.do_open..rÍÚ ConnectioncSsi|]\}}| ¡|“qSrL)Útitle)rþr_rŸrLrLrMr<srœrªr¨)Zencode_chunked)rzrrJZset_debuglevelrŸràr|Úupdaterirr~Z set_tunnelryr˜r�rIr‘rqÚ getresponserÍZsockr™rHÚreasonrô) r„Z http_classrÙZhttp_conn_argsrzrëZtunnel_headersZproxy_auth_hdrÚerrr$rLrªrMr¹!sB    ÿ    zAbstractHTTPHandler.do_openN)r)r©rªr«r‡r¢r¤r©r¹rLrLrLrMr�îs  &r�c@seZdZdd„ZejZdS)r)cCs| tjj|¡SrN)r¹rÝrär£©r„rÙrLrLrMÚ http_openfszHTTPHandler.http_openN)r©rªr«r²r�r©rerLrLrLrMr)dsrãc@s$eZdZddd„Zdd„ZejZdS)rErNcCst ||¡||_||_dSrN)r�r‡Ú_contextÚ_check_hostname)r„r r>Úcheck_hostnamerLrLrMr‡os zHTTPSHandler.__init__cCs|jtjj||j|jd�S)N)r>rµ)r¹rÝrärãr³r´r±rLrLrMÚ https_opents ÿzHTTPSHandler.https_open)rNN)r©rªr«r‡r¶r�r©rirLrLrLrMrEms rEc@s.eZdZddd„Zdd„Zdd„ZeZeZdS) rNcCs$ddl}|dkr|j ¡}||_dSro)Zhttp.cookiejarÚ cookiejarZ CookieJar)r„r·rÝrLrLrMr‡}s zHTTPCookieProcessor.__init__cCs|j |¡|SrN)r·Zadd_cookie_headerr¥rLrLrMreƒs z HTTPCookieProcessor.http_requestcCs|j ||¡|SrN)r·Zextract_cookies)r„ryr½rLrLrMrõ‡sz!HTTPCookieProcessor.http_response)N)r©rªr«r‡rerõrirörLrLrLrMr|s  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.ŽscCsNi}|D]@}| dd¡\}}|ddkr@|ddkr@|dd…}|||<q|S)Nú=rVrrQrS)rX)ÚlZparsedZeltrÿrrLrLrMrv“s  rvcCsžg}d}d}}|D]l}|r*||7}d}q|rT|dkr>d}qn |dkrJd}||7}q|dkrl| |¡d}q|dkrxd}||7}q|r�| |¡dd„|DƒS) NrrFú\TrQr�cSsg|] }| ¡‘qSrL)rd)rþÚpartrLrLrMÚ Æsz#parse_http_list..)ra)r…Úresr»Úescaper ZcurrLrLrMrx�s4    rxc@s(eZdZdd„ZdZdd„Zdd„ZdS)r*cCs\|j}|dd…dkrN|dd…dkrN|jrN|jdkrN|j| ¡krXtdƒ‚n | |¡SdS)Nr:rrSr Ú localhostú-file:// scheme is supported only on localhost)r�rzÚ get_namesrÚopen_local_file)r„rÙrHrLrLrMÚ file_openÊs&ÿ zFileHandler.file_openNcCs`tjdkrZz*tt d¡dt t ¡¡dƒt_Wn$tjk rXt d¡ft_YnXtjS)Nr¿r:)r*Únamesr8ráÚgethostbyname_exÚ gethostnameÚgaierrorÚ gethostbynamer‹rLrLrMrÁÕs  ÿÿ zFileHandler.get_namesc Csþddl}ddl}|j}|j}t|ƒ}z¢t |¡}|j}|jj |j dd�} |  |¡d} |  d| pbd|| f¡} |r~t |ƒ\}} |r–| sÄt|ƒ| ¡krÄ|r¨d||} nd|} tt|dƒ| | ƒWSWn*tk rð}z t|ƒ‚W5d}~XYnXtdƒ‚dS) NrT©Zusegmtz6Content-type: %s Content-length: %d Last-modified: %s ú text/plainúfile://Úrbzfile not on local host)Ú email.utilsÚ mimetypesrzr�r4r[ÚstatÚst_sizeÚutilsÚ formatdateÚst_mtimeÚ guess_typeÚmessage_from_stringr Ú_safe_gethostbynamerÁrrGrqr)r„rÙÚemailrÎrzrfZ localfileÚstatsrmÚmodifiedÚmtyperirCZorigurlÚexprLrLrMrÂàs:  ÿÿ ÿÿzFileHandler.open_local_file)r©rªr«rÃrÄrÁrÂrLrLrLrMr*Ès  cCs*z t |¡WStjk r$YdSXdSrN)rárÈrÇ)rzrLrLrMrÖûs rÖc@seZdZdd„Zdd„ZdS)r+c Cs*ddl}ddl}|j}|s"tdƒ‚t|ƒ\}}|dkr>|j}nt|ƒ}t|ƒ\}}|rdt|ƒ\}}nd}t |ƒ}|pvd}|p~d}zt   |¡}Wn*t k r¸}z t|ƒ‚W5d}~XYnXt |jƒ\} } |  d¡} ttt | ƒƒ} | dd…| d} } | �r| d�s| dd…} zÎ| ||||| |j¡} | �r6d�p8d}| D]2}t|ƒ\}}| ¡d k�r>|d k�r>| ¡}�q>|  | |¡\}}d}| |j¡d}|�r¨|d |7}|dk �rÈ|dk�rÈ|d |7}t |¡}t|||jƒWS|jk �r$}z"td |ƒ}| t  ¡d¡‚W5d}~XYnXdS)Nrúftp error: no host givenrrr rSrVrhÚDr“©ÚaÚArÇrhr—rÝzContent-type: %s zContent-length: %d ú ftp error: %rr:)!ÚftplibrÎrzrr ÚFTP_PORTrbrrr rárÈrqrr�rXr¦ÚmapÚ connect_ftprJrrxÚupperÚretrfilerÔrtr×rÕrÚ all_errorsÚwith_tracebackrÕÚexc_info)r„rÙrârÎrzrCr r1rôr\ÚattrsÚdirsrOÚfwr“Úattrr†rhÚretrlenrirÚrÛÚexcrLrLrMÚftp_opens^     ÿ     zFTPHandler.ftp_openc Cst||||||dd�S)NF)Ú persistent)Ú ftpwrapper)r„r r1rzrCrìrJrLrLrMrå7sÿzFTPHandler.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é<r})ÚcacherJÚsoonestÚdelayÚ max_connsr‹rLrLrMr‡>s zCacheFTPHandler.__init__cCs ||_dSrN)r÷)r„ÚtrLrLrMÚ setTimeoutEszCacheFTPHandler.setTimeoutcCs ||_dSrN)rø)r„rrLrLrMÚ setMaxConnsHszCacheFTPHandler.setMaxConnscCsr|||d |¡|f}||jkr4t ¡|j|j|<n,t||||||ƒ|j|<t ¡|j|j|<| ¡|j|S)Nr )Újoinrõr~r÷rJróÚ check_cache)r„r r1rzrCrìrJr…rLrLrMråKs  ÿ zCacheFTPHandler.connect_ftpcCsÂt ¡}|j|krPt|j ¡ƒD].\}}||kr |j| ¡|j|=|j|=q tt|j ¡ƒƒ|_t |jƒ|j kr¾t|j ¡ƒD]&\}}||jkr‚|j|=|j|=qªq‚tt|j ¡ƒƒ|_dSrN) r~rör¦rJrrõrÍÚminÚvaluesrdrø)r„rùrÿrrLrLrMrýVs   zCacheFTPHandler.check_cachecCs0|j ¡D] }| ¡q |j ¡|j ¡dSrN)rõrÿrÍÚclearrJ)r„ÚconnrLrLrMÚ clear_cachejs  zCacheFTPHandler.clear_cacheN) r©rªr«r‡rúrûrårýrrLrLrLrMr,;s  c@seZdZdd„ZdS)r-cCs~|j}| dd¡\}}| dd¡\}}t|ƒ}| d¡rNt |¡}|dd…}|sVd}t d|t|ƒf¡}t t   |¡||ƒS)Nú:rVr�z;base64iùÿÿÿútext/plain;charset=US-ASCIIz$Content-type: %s Content-length: %d ) rtrXrÚendswithr-Ú decodebytesr×rÕrdrÚioÚBytesIO)r„rÙrHrrIZ mediatyperirLrLrMÚ data_openqs     ÿzDataHandler.data_openN)r©rªr«r rLrLrLrMr-psrøÚnt)r4r3cCst|ƒSrN)r ©ÚpathnamerLrLrMr4—scCst|ƒSrN)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)2r8Nr¯cKszdd|jji}tj|tdd�|dkr.tƒ}||_| d¡|_| d¡|_ d|j fdg|_ g|_ t j|_d|_t|_dS) NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsÚclassrS)Ú stacklevelÚkey_fileÚ cert_filez User-Agent)ZAcceptz*/*)rLr©r?r@rAr5r&r£rrÚversionr±Ú_URLopener__tempfilesr[rpÚ_URLopener__unlinkÚ tempcacheÚftpcache)r„r&Zx509rôrLrLrMr‡²s ÿ  zURLopener.__init__cCs | ¡dSrN)rÍr‹rLrLrMÚ__del__ÌszURLopener.__del__cCs | ¡dSrN)Úcleanupr‹rLrLrMrÍÏszURLopener.closec CsV|jrB|jD](}z| |¡Wq tk r2Yq Xq |jdd…=|jrR|j ¡dSrN)rrrqrr)r„rOrLrLrMrÒs  zURLopener.cleanupcGs|j |¡dSrN)r±ra)r„rÐrLrLrMÚ addheaderàszURLopener.addheaderc Csptt|ƒƒ}t|dd�}|jrL||jkrL|j|\}}t|dƒ}t|||ƒSt|ƒ\}}|s`d}||jkr–|j|}t|ƒ\}} t| ƒ\} } | |f}nd}d|} ||_ |   dd¡} t || ƒrÆ| dkrä|rØ|  |||¡S|  ||¡Sz0|dk�rt|| ƒ|ƒWSt|| ƒ||ƒWSWnVttfk �r0‚Yn<tk �rj} ztd | ƒ t ¡d ¡‚W5d} ~ XYnXdS) Nz%/:=&?~#+!$,;'@()*[]|©r rÌrOZopen_ú-r»rÂz socket errorr:)rrr rrGrr r&r r“rr¾Úopen_unknown_proxyÚ open_unknownr—rrrqrérÕrê)r„rØrIrfrirhÚurltyperHrÚ proxyhostrzr�r_rôrLrLrMrGæs<             zURLopener.opencCst|ƒ\}}tdd|ƒ‚dS)Nú url errorzunknown url type©r rq)r„rØrIr“rHrLrLrMr s zURLopener.open_unknowncCs t|ƒ\}}tdd||ƒ‚dS)Nrzinvalid proxy for %sr )r„rrØrIr“rHrLrLrMrs zURLopener.open_unknown_proxyc Cstt|ƒƒ}|jr&||jkr&|j|St|ƒ\}}|dkrš|rF|dkršz0| |¡}| ¡}| ¡tt|ƒdƒ|fWSt k r˜} zW5d} ~ XYnX|  ||¡}�z<| ¡} |rÂt |dƒ} nrt|ƒ\} } t| pÖdƒ\} } t | pædƒ\} } t | pödƒ\} } t j | ¡d}t |¡\}}|j |¡t  |d¡} z¢|| f}|jdk �rT||j|<d}d}d}d}d| k�rzt| d ƒ}|�rŒ||||ƒ| |¡}|�s �qÔ|t|ƒ7}|  |¡|d7}|�rŒ||||ƒ�qŒW5|  ¡XW5| ¡X|dk�r||k�rtd ||f|ƒ‚|S) NrOrVrPrrrRrSrrTrUrW)rrrr rÂrZrÍr4r rqrGrrr[r\Úsplitextr^ZmkstemprraÚfdopenrbrcrdrer)r„rHrfrgrIr“Zurl1rhr§rôrirjZgarbager\ÚsuffixÚfdrkrlrmrcrnrorLrLrMÚretrievesn                  ÿþzURLopener.retrievecCs$d}d}t|tƒrtd |ƒ‚tt|d ƒ| | ƒStd ƒ‚dS)NrTrÉz6Content-Type: %s Content-Length: %d Last-modified: %s rÊrVr rË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 r4r[rÏrqrÚstrerrorrfrÐrÑrÒrÓrÔrÕrrGr rárÈr¿ÚthishostrB)r„rHr×rÎrzrOZ localnamerØÚermrÙrÚriZurlfilerCrLrLrMrÂÞs@   ÿÿ ÿ  zURLopener.open_local_filec CsŒt|tƒstdƒ‚ddl}t|ƒ\}}|s2tdƒ‚t|ƒ\}}t|ƒ\}}|r\t|ƒ\}}nd}t|ƒ}t|ppdƒ}t|p|dƒ}t   |¡}|sžddl }|j }nt |ƒ}t|ƒ\}} t|ƒ}| d¡} | dd…| d} } | rò| dsò| dd…} | �r | d�s d| d<|||d | ¡f} t|jƒtk�rbt|jƒD]*} | | k�r6|j| }|j| =| ¡�q6zä| |jk�r†t||||| ƒ|j| <| �s’d}nd }| D]2}t|ƒ\}}| ¡d k�rš|d k�rš| ¡}�qš|j|  | |¡\}}| d |¡d}d}|�r |d |7}|dk �r,|dk�r,|d|7}t |¡}t||d |ƒWStƒk �r†}ztd|ƒ  t! "¡d¡‚W5d}~XYnXdS)NzCftp error: proxy support for ftp protocol currently not implementedrrÜrrr rSrVrÝrhr“rÞzftp:zContent-Type: %s zContent-Length: %d z ftp error %rr:)#rÓrÔrrÎr r rrr rárÈrârãrbrrXrürdrÚ MAXFTPCACHEr¦rÍrórrxrærçrÔr×rÕrÚ ftperrorsrérÕrê)r„rHrÎrzr\rCr r1rârërìrOr…rÿrr“rîr†rhrïrÚrirÛrLrLrMÚopen_ftpþst              ÿ ÿ    zURLopener.open_ftpc Cs<t|tƒstdƒ‚z| dd¡\}}Wntk rDtddƒ‚YnX|sNd}| d¡}|dkrŽd ||d…krŽ||dd…}|d|…}nd }g}| d t  d t  t ¡¡¡¡| d |¡|dkrät   |  d¡¡ d¡}nt|ƒ}| dt|ƒ¡| d ¡| |¡d |¡}t |¡}t |¡}t|||ƒS)NzEdata error: proxy support for data protocol currently not implementedr�rVz data errorz bad data URLrú;rr¸rrzDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %sr-r)zlatin-1zContent-Length: %dÚ )rÓrÔrrXrBrqÚrfindrar~ÚstrftimeÚgmtimer-rr/r0r rdrür×rÕrÚStringIOr) r„rHrIr“Zsemir rôriÚfrLrLrMÚ open_data8s8    ÿ     zURLopener.open_data)N)N)N)N)NNN)N)N)N)N)r©rªr«rr°rr‡rrÍrrrGrrr%r(r*r'rÞrCr.r/r1rÂr7r?rLrLrLrMr8¥s,  $   A\     :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ÚmaxtriesrIrLrLrMr‡eszFancyURLopener.__init__cCst||d||ƒS)Nr&)rr-rLrLrMrÞksz!FancyURLopener.http_error_defaultNc Csv|jd7_zZ|jrN|j|jkrNt|dƒr4|j}n|j}|||dd|ƒW¢S| ||||||¡}|W¢Sd|_XdS)NrVrÚhttp_error_500rìz)Internal Server Error: Redirect Recursion)rArBr¾rCrÞÚredirect_internal) r„rHrhr+r,rirIrÆrkrLrLrMros  þ ÿzFancyURLopener.http_error_302c Csxd|kr|d}nd|kr$|d}ndS| ¡t|jd||ƒ}t|ƒ}|jdkrnt|||d|||ƒ‚| |¡S)Nrrrrz( Redirection to url '%s' is not allowed.)rÍrr“rrrrG) r„rHrhr+r,rirIrrrLrLrMrD�s"   ÿýz FancyURLopener.redirect_internalcCs| ||||||¡SrN©r©r„rHrhr+r,rirIrLrLrMr�szFancyURLopener.http_error_301cCs| ||||||¡SrNrErFrLrLrMr¡szFancyURLopener.http_error_303cCs2|dkr| ||||||¡S| |||||¡SdSrN)rrÞrFrLrLrMr¥szFancyURLopener.http_error_307Fc CsÈd|krt ||||||¡|d}t d|¡} | sHt ||||||¡|  ¡\} } |  ¡dkrtt ||||||¡|sŒt ||||||¡d|jd} |dkr²t|| ƒ|| ƒSt|| ƒ|| |ƒSdS)Nrjú![ ]*([^ ]+)[ ]+realm="([^"]*)"r[Zretry_Ú _basic_auth©r8rÞrfÚmatchrVrxr“r—© r„rHrhr+r,rirIr›ZstuffrJrr9r_rLrLrMrk¬s: ÿ  ÿ   ÿÿzFancyURLopener.http_error_401c CsÈd|krt ||||||¡|d}t d|¡} | sHt ||||||¡|  ¡\} } |  ¡dkrtt ||||||¡|sŒt ||||||¡d|jd} |dkr²t|| ƒ|| ƒSt|| ƒ|| |ƒSdS)NrmrGr[Z retry_proxy_rHrIrKrLrLrMrnÅs: ÿ  ÿ   ÿÿzFancyURLopener.http_error_407cCsÄt|ƒ\}}d||}|jd}t|ƒ\}} t| ƒ\} } |  d¡d} | | d…} | | || ¡\} } | sr| srdSdt| dd�t| dd�| f} d| | |jd<|dkr´| |¡S| ||¡SdS)Núhttp://rÝrrVú%s:%s@%srrr©r r&r rÁÚget_user_passwdr rG©r„rHr9rIrzr�rrrrZ proxyselectorrÇr r1rLrLrMÚretry_proxy_http_basic_authÞs$        ÿ z*FancyURLopener.retry_proxy_http_basic_authcCsÄt|ƒ\}}d||}|jd}t|ƒ\}} t| ƒ\} } |  d¡d} | | d…} | | || ¡\} } | sr| srdSdt| dd�t| dd�| f} d| | |jd<|dkr´| |¡S| ||¡SdS)Núhttps://ršrrVrMrrrrNrPrLrLrMÚretry_proxy_https_basic_authðs$        ÿ z+FancyURLopener.retry_proxy_https_basic_authc Cs�t|ƒ\}}| d¡d}||d…}| |||¡\}}|sD|sDdSdt|dd�t|dd�|f}d||} |dkr€| | ¡S| | |¡SdS)NrrVrMrrrrL©r rÁrOr rG© r„rHr9rIrzr�rÇr r1rrLrLrMr\ s    ÿ  z$FancyURLopener.retry_http_basic_authc Cs�t|ƒ\}}| d¡d}||d…}| |||¡\}}|sD|sDdSdt|dd�t|dd�|f}d||} |dkr€| | ¡S| | |¡SdS)NrrVrMrrrrRrTrUrLrLrMÚretry_https_basic_auth s    ÿ  z%FancyURLopener.retry_https_basic_authrcCs`|d| ¡}||jkr2|r(|j|=n |j|S| ||¡\}}|sJ|rX||f|j|<||fS)Nr)rxr@Úprompt_user_passwd)r„rzr9rr…r r1rLrLrMrO s   zFancyURLopener.get_user_passwdcCsXddl}z.td||fƒ}| d|||f¡}||fWStk rRtƒYdSXdS)NrzEnter username for %s at %s: z#Enter password for %s in %s at %s: r<)ÚgetpassÚinputÚKeyboardInterruptÚprint)r„rzr9rXr r1rLrLrMrW) sÿ z!FancyURLopener.prompt_user_passwd)N)N)N)N)NF)NF)N)N)N)N)r)r©rªr«r‡rÞrrDrrrrkrnrQrSr\rVrOrWrLrLrLrMr9bs&    ÿ ÿ      cCstdkrt d¡atS)Nr¿)Ú _localhostrárÈrLrLrLrMr¿9 s r¿cCsPtdkrLztt t ¡¡dƒaWn(tjk rJtt d¡dƒaYnXtS)Nr:r¿)Ú _thishostr8rárÅrÆrÇrLrLrLrMr3A s r3cCstdkrddl}|jatSro)Ú _ftperrorsrârè)rârLrLrMr6L sr6cCstdkrt d¡atSrŽ)Ú _noheadersr×rÕrLrLrLrMÚ noheadersU s r`c@sFeZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dS)róNTcCsX||_||_||_||_||_||_d|_||_z | ¡Wn|  ¡‚YnXdSro) r r1rzrCrìrJÚrefcountÚ keepaliveÚinitrÍ)r„r r1rzrCrìrJròrLrLrMr‡b s zftpwrapper.__init__cCs\ddl}d|_| ¡|_|j |j|j|j¡|j |j |j ¡d  |j ¡}|j  |¡dS)Nrr )râÚbusyZFTPr ZconnectrzrCrJZloginr r1rürìÚcwd)r„râZ_targetrLrLrMrcr s  zftpwrapper.initc Cs¶ddl}| ¡|dkr"d}d}n d|}d}z|j |¡Wn*|jk rh| ¡|j |¡YnXd}|ræ|sæzd|}|j |¡\}}WnR|jk rä}z2t|ƒdd…dkrÔt d |ƒ  t   ¡d ¡‚W5d}~XYnX|�s€|j d¡|�rl|j  ¡} zJz|j |¡Wn4|jk �rN}zt d |ƒ|‚W5d}~XYnXW5|j | ¡Xd |}nd }|j |¡\}}d|_t| d ¡|jƒ} |jd7_| ¡| |fS)Nr)r—rÝzTYPE ArVzTYPE zRETR rSZ550rár:zLIST ZLISTrÌ)râÚ endtransferr ZvoidcmdrèrcZ ntransfercmdZ error_permrÔrrérÕrêÚpwdrerdrZmakefileÚ file_closerarÍ) r„rOr“râÚcmdÚisdirrrïr¯rgZftpobjrLrLrMrç{ sP  ÿ  $ zftpwrapper.retrfilecCs d|_dSro)rdr‹rLrLrMrf¨ szftpwrapper.endtransfercCsd|_|jdkr| ¡dS)NFr)rbraÚ real_closer‹rLrLrMrÍ« s zftpwrapper.closecCs2| ¡|jd8_|jdkr.|js.| ¡dS)NrVr)rfrarbrkr‹rLrLrMrh° szftpwrapper.file_closecCs2| ¡z|j ¡Wntƒk r,YnXdSrN)rfr rÍr6r‹rLrLrMrk¶ s zftpwrapper.real_close)NT) r©rªr«r‡rcrçrfrÍrhrkrLrLrLrMró_ sÿ  -rócCs´i}tj ¡D]4\}}| ¡}|r|dd…dkr|||dd…<qdtjkrZ| dd¡tj ¡D]J\}}|dd…dkrd| ¡}|rš|||dd…<qd| |dd…d¡qd|S)NiúÿÿÿÚ_proxyZREQUEST_METHODrÝ)r[Úenvironrrxr¥)r&r_r†rLrLrMÚgetproxies_environment¾ s   rncCs¼|dkrtƒ}z |d}Wntk r0YdSX|dkr>dS| ¡}t|ƒ\}}| d¡D]Z}| ¡}|r\| d¡}| ¡}||ksŽ||kr”dSd|}| |¡s°| |¡r\dSq\dS)NZnoFÚ*Tr�Ú.)rnrŽrxr rXrdÚlstripr)rzr&Zno_proxyÚhostonlyrCr_rLrLrMÚproxy_bypass_environmentÝ s*   rsc Cs0ddlm}t|ƒ\}}dd„}d|kr4|dr4dSd}| dd ¡D]æ}|sNqDt d |¡}|dk �r|dkrœzt |¡}||ƒ}Wntk ršYqDYnX|| d ¡ƒ} | d ¡} | dkrÖd | d ¡  d¡d } nt | d d…ƒ} | dksD| dkrøqDd| } || ?| | ?k�r*dSqD|||ƒrDdSqDdS)Nr)ÚfnmatchcSsh| d¡}ttt|ƒƒ}t|ƒdkr<|ddddgdd…}|dd>|dd>B|dd>B|d BS) Nrpr÷rérVr}r:r|rS)rXr¦rärbrd)ZipAddrrBrLrLrMÚip2num s   z,_proxy_bypass_macosx_sysconf..ip2numrpZexclude_simpleTÚ exceptionsrLz(\d+(?:\.\d+)*)(/\d+)?rVr:r|é F) rtr r£rfrJrárÈrqÚgroupÚcountrb) rzÚproxy_settingsrtrrrCrvZhostIPr†rrDÚmaskrLrLrMÚ_proxy_bypass_macosx_sysconf s>         r}Údarwin)Ú_get_proxy_settingsÚ _get_proxiescCstƒ}t||ƒSrN)rr})rzr{rLrLrMÚproxy_bypass_macosx_sysconfF sr�cCstƒSrN)r€rLrLrLrMÚgetproxies_macosx_sysconfJ sr‚cCs tƒ}|rt||ƒSt|ƒSdSrN)rnrsr�©rzr&rLrLrMr,T s r,cCs tƒp tƒSrN)rnr‚rLrLrLrMr5a sc Csi}z ddl}Wntk r(|YSXzÊ| |jd¡}| |d¡d}|rêt| |d¡dƒ}d|kr¬| d¡D]4}| dd¡\}}t d|¡s d ||f}|||<qtn>|dd …d krÆ||d <n$d ||d <d||d<d||d<|  ¡Wnt t t fk �rYnX|S)Nrú;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚ ProxyEnableZ ProxyServerr¸r8rVz (?:[^/:]+)://z%s://%srtr&rÝz http://%sz https://%sršzftp://%sr ) ÚwinregÚ ImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚ QueryValueExrÔrXrfrJZCloserqrBr¿)r&r†ÚinternetSettingsÚ proxyEnableZ proxyServerÚprÈZaddressrLrLrMÚgetproxies_registryf sF  ÿÿÿÿÿ        rŽcCs tƒp tƒSrN)rnrŽrLrLrLrMr5“ sc Cs|z ddl}Wntk r"YdSXz6| |jd¡}| |d¡d}t| |d¡dƒ}Wntk rpYdSX|rz|s~dSt|ƒ\}}|g}z t  |¡}||kr®|  |¡Wntk rÄYnXz t  |¡}||krä|  |¡Wntk �rüYnX|  d¡}|D]j} | dk�r*d|k�r*dS|   dd ¡} |   d d ¡} |   d d¡} |D] } t | | tj¡�rRdS�qR�q dS) Nrr„r…Z ProxyOverrider8zrprVz\.roz.*ú?)r†r‡rˆr‰rŠrÔrqr rárÈraZgetfqdnrXrrfrJrh) rzr†r‹rŒZ proxyOverrideZrawHostrCZaddrZfqdnrErŸrLrLrMÚproxy_bypass_registryœ s` ÿÿÿÿÿ          r�cCs tƒ}|rt||ƒSt|ƒSdSrN)rnrsr�rƒrLrLrMr,Î s )NNN)N)}r-rÄr×r�Z http.clientrÝrr[Ú posixpathrfrárrÕr~r^rXr?Z urllib.errorrrrZ urllib.parserrrrr r r r r rrrrrrrrrZurllib.responserrrDr‡rCÚ__all__Ú version_infor°rFrâr0r1r`r6r7rgÚASCIIrvr{rrr2rr/rrr"rr r!r"r#r$r%Úurandomr€r&r'r(r�r)r¾rärErarr.rvrxr*rÖr+r,r-r5r_Z nturl2pathr4r3rr8r9r\r¿r]r3r^r6r_r`rórnrsr}ÚplatformZ_scproxyrr€r�r‚r,r5rŽr�rLrLrLrMÚTsP  òÿ U ?m$q!+@ o  v  +3:5! @W  _ %A    - 2