o ?Ogn@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*zddl+Z+Wn e,ydZ-YnwdZ-gdZ.de j/dd Z0da1de j2fddddd d d Z3d dZ4gZ5dddZ6ddZ7e 8de j9Z:ddZ;GdddZGdddZ?Gddde?Z@Gd d!d!e?ZAGd"d#d#e?ZBd$d%ZCGd&d'd'e?ZDGd(d)d)ZEGd*d+d+eEZFGd,d-d-eFZGGd.d/d/ZHGd0d1d1eHe?ZIGd2d3d3eHe?ZJejKZLGd4d5d5ZMGd6d7d7e?eMZNGd8d9d9e?eMZOGd:d;d;e?ZPGdrsGd?d@d@ePZTe.Ud@GdAdBdBe?ZVGdCdDdDe?ZWdEdFZXdGdHZYGdIdJdJe?ZZdKdLZ[GdMdNdNe?Z\GdOdPdPe\Z]GdQdRdRe?Z^dSZ_ej`dTkrddUlambZbmcZcndVdWZbdXdYZciZdGdZd[d[ZeGd\d]d]eeZfdagd^d_Zhdaid`daZjdakdbdcZldamdddeZnGdfdgdgZodhdiZpddjdkZqdldmZrdndoZse jtdpkr)ddqlumvZvmwZwdrdsZxdtduZydvdwZzdxdyZ{dSej`dTkrAdzd{Z|d|dyZ{d}d~Z}ddwZzdSepZ{eqZzdS)N)URLError HTTPErrorContentTooShortError)urlparseurlspliturljoinunwrapquoteunquote _splittype _splithost _splitport _splituser _splitpasswd _splitattr _splitquery _splitvalue _splittag _to_bytesunquote_to_bytes urlunparse) addinfourl addclosehookFT)!RequestOpenerDirector BaseHandlerHTTPDefaultErrorHandlerHTTPRedirectHandlerHTTPCookieProcessor ProxyHandlerHTTPPasswordMgrHTTPPasswordMgrWithDefaultRealmHTTPPasswordMgrWithPriorAuthAbstractBasicAuthHandlerHTTPBasicAuthHandlerProxyBasicAuthHandlerAbstractDigestAuthHandlerHTTPDigestAuthHandlerProxyDigestAuthHandler HTTPHandler FileHandler FTPHandlerCacheFTPHandler DataHandlerUnknownHandlerHTTPErrorProcessorurlopeninstall_opener build_opener pathname2url url2pathname getproxies urlretrieve urlcleanup URLopenerFancyURLopenerz%d.%d)cafilecapath cadefaultcontextc Cs |s|s|r:ddl}|dtd|durtdts tdtjtjj||d}| dgt |d}t |} n|rFt |d}t |} n t durPt 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<zhttp/1.1)r>)warningswarnDeprecationWarning ValueError _have_sslsslZcreate_default_contextZPurposeZ SERVER_AUTHZset_alpn_protocols HTTPSHandlerr2_openeropen) urldatatimeoutr;r<r=r>r?Z https_handleropenerrL5/opt/alt/python310/lib64/python3.10/urllib/request.pyr0s4 2       r0cCs|adSN)rF)rKrLrLrMr1sr1c Csd t|\}}tt||}|}|dkr)|s)tj||fWdS|r1t|d}nt j dd}|j }t ||G||f} d} d} d} d} d|vrXt|d } |r`|| | |  || }|sin| t|7} ||| d 7} |r|| | | qaWdn1swYWdn1swY| dkr| | krtd | | f| | S) NfilewbF)delete rcontent-lengthContent-LengthT1retrieval incomplete: got only %i out of %i bytes)r contextlibclosingr0infoospathnormpathrGtempfileZNamedTemporaryFilename_url_tempfilesappendintreadlenwriter)rHfilename reporthookrIZurl_typer\fpheaderstfpresultbssizercblocknumblockrLrLrMr6sX           &r6c CsF tD]}zt|WqtyYqwtdd=tr!dadSdSrN)r`r[unlinkOSErrorrF)Z temp_filerLrLrMr7s  r7z:\d+$cCs> |j}t|d}|dkr|dd}td|d}|S)NrVHost)full_urlr get_header _cut_port_resublower)requestrHhostrLrLrM request_host-s  r{c@seZdZdidddfddZeddZejddZejddZed d Zejd d Zejd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZd#ddZdd Zd!d"ZdS)$rNFc Csp||_i|_i|_d|_||_d|_|D] \}}|||q|dur)t|}||_ ||_ |r6||_ dSdSrN) rtriunredirected_hdrs_datarI _tunnel_hostitems add_headerr{origin_req_host unverifiablemethod) selfrHrIrirrrkeyvaluerLrLrM__init__?s zRequest.__init__cCs|jr d|j|jS|jS)Nz{}#{})fragmentformat _full_urlrrLrLrMrtQszRequest.full_urlcCs(t||_t|j\|_|_|dSrN)rrrr_parserrHrLrLrMrtWs  cCsd|_d|_d|_dSNrr)rrselectorrrLrLrMrt^s cC|jSrN)r}rrLrLrMrIdsz Request.datacCs0||jkr||_|dr|ddSdSdS)NContent-length)r} has_header remove_header)rrIrLrLrMrIhs  cCs d|_dSrN)rIrrLrLrMrIrs cCsRt|j\|_}|jdurtd|jt|\|_|_|jr't|j|_dSdS)Nzunknown url type: %r) r rtyperBrtr rzrr )rrestrLrLrMrvs zRequest._parsecCs |jdurdnd}t|d|S)NPOSTGETr)rIgetattr)rZdefault_methodrLrLrM get_method~s zRequest.get_methodcCrrN)rtrrLrLrM get_full_urlszRequest.get_full_urlcCs2|jdkr |js |j|_n||_|j|_||_dS)Nhttps)rr~rzrtr)rrzrrLrLrM set_proxys   zRequest.set_proxycCs |j|jkSrN)rrtrrLrLrM has_proxy zRequest.has_proxycC||j|<dSrN)ri capitalizerrvalrLrLrMrzRequest.add_headercCrrN)r|rrrLrLrMadd_unredirected_headerrzRequest.add_unredirected_headercCs||jvp ||jvSrN)rir|r header_namerLrLrMrs zRequest.has_headercCs|j||j||SrN)rigetr|)rrdefaultrLrLrMrus zRequest.get_headercCs |j|d|j|ddSrN)ripopr|rrLrLrMrszRequest.remove_headercCsi|j|j}t|SrN)r|rilistr)rhdrsrLrLrM header_itemss zRequest.header_itemsrN)__name__ __module__ __qualname__rpropertyrtsetterdeleterrIrrrrrrrrrurrrLrLrLrMr=s8         rc@sNeZdZddZddZddZddZd ejfd d Z dd d Z ddZ d S)rcCs6dt}d|fg|_g|_i|_i|_i|_i|_dS)NPython-urllib/%sz User-agent) __version__ addheadershandlers handle_open handle_errorprocess_responseprocess_request)rZclient_versionrLrLrMrs  zOpenerDirector.__init__c CsPt|ds tdt|d}t|D]}|dvrq|d}|d|}||dd}|dr`|d|d}||dd}zt|}Wn tyRYnw|j |i} | |j|<n|dkrj|}|j } n|d krt|}|j } n |d kr~|}|j } nq| |g} | rt| |n| |d }q|rt|j|||dSdS) N add_parentz%expected BaseHandler instance, got %rF)redirect_requestdo_open proxy_open_rVerrorrGresponseryT)hasattr TypeErrorrdirfind startswithrbrBrrrrr setdefaultbisectZinsortrarr) rhandlerZaddedmethiprotocolZ conditionjkindlookuprrLrLrM add_handlersP          zOpenerDirector.add_handlercCdSrNrLrrLrLrMclosezOpenerDirector.closec Gs<||d}|D]}t||}||}|dur|SqdS)NrL)rr) rchainr meth_nameargsrrfuncrkrLrLrM _call_chains  zOpenerDirector._call_chainNc Cst|tr t||}n |}|dur||_||_|j}|d}|j|gD] }t||}||}q%t d|j |j|j | |||} |d}|j|gD] }t||}||| } qP| S)NZ_requestzurllib.RequestZ _response) isinstancestrrrIrJrrrrsysauditrtrir_openr) rfullurlrIrJreqrrZ processorrrrLrLrMrGs$       zOpenerDirector.opencCsP||jdd|}|r |S|j}||j||d|}|r|S||jdd|S)NrZ default_openrunknown unknown_open)rrr)rrrIrkrrLrLrMrs   zOpenerDirector._opencGs~|dvr|jd}|d}d|}d}|}n |j}|d}d}|||f|}|j|}|r/|S|r=|dd f|}|j|SdS) Nhttprrr:z http_error_%srVZ_errorrrhttp_error_default)rr)rprotordictrZhttp_errZ orig_argsrkrLrLrMr s"   zOpenerDirector.errorrN) rrrrrrrsocket_GLOBAL_DEFAULT_TIMEOUTrGrrrLrLrLrMrs /  rc Gs t}ttttttttt g }t t j dr| tt}|D]!}|D]}t|tr5t||r4||q#t||r?||q#q|D]}||qC|D]}||qM|D]}t|trb|}||qX|S)NHTTPSConnection)rrr.r)rrr+r*r/r-rrclientrarEsetrr issubclassaddremover)rrKZdefault_classesskipklassZcheckhrLrLrMr29s:          r2c@s(eZdZdZddZddZddZdS) rcC ||_dSrN)parent)rrrLrLrMr` zBaseHandler.add_parentcCrrNrLrrLrLrMrcrzBaseHandler.closecCst|dsdS|j|jkS)N handler_orderT)rr)rotherrLrLrM__lt__gs  zBaseHandler.__lt__N)rrrrrrrrLrLrLrMr]s  rc@seZdZ dZddZeZdS)r/icCsH|j|j|}}}d|krdks"n|jd|||||}|S)N,r)codemsgrZrr)rryrrrrrLrLrM http_responsets  z HTTPErrorProcessor.http_responseN)rrrrrhttps_responserLrLrLrMr/ps  r/c@eZdZddZdS)rcCst|j||||rN)rrt)rrrhrrrrLrLrMrsz*HTTPDefaultErrorHandler.http_error_defaultN)rrrrrLrLrLrMr rc@s4eZdZdZdZddZddZeZZZ dZ dS) r c sv |}|dvr |dvs|dvr|dkst|j|||||dd}dfdd |jD}t|||jd d S) N)-./i3)rZHEAD)rrrr z%20)rTz content-typecs"i|] \}}|vr||qSrL)rx.0kvZCONTENT_HEADERSrLrM s z8HTTPRedirectHandler.redirect_request..T)rirr)rrrtreplacerirrr) rrrhrrrinewurlmZ newheadersrLr rMrs  z$HTTPRedirectHandler.redirect_requestc CsHd|vr |d}n d|vr|d}ndSt|}|jdvr)t||d||f|||js7|jr7t|}d|d<t|}t|dtj d}t |j |}| ||||||}|durYdSt |d r|j} |_| |d |jkstt| |jkrt|j ||j|||ni} |_|_| |d d | |<|||jj||jd S) Nlocationurirrftprrz+%s - Redirection to url '%s' is not allowed/r:z iso-8859-1)encodingsafe redirect_dictrrVrJ)rschemerr\Znetlocrrr stringZ punctuationrrtrrrr max_repeatsrdmax_redirectionsinf_msgrcrrrGrJ) rrrhrrrirurlpartsnewZvisitedrLrLrMhttp_error_302sH         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) rrrrrrr http_error_301http_error_303http_error_307rrLrLrLrMrs& <rc Cs t|\}}|dsd}|}n-|dstd|d|vr,|d}|d|}n|dd}|dkr8d}|d|}t|\}}|durOt|\}} nd}} ||| |fS)Nr//zproxy URL with no authority: %r@r:rS)r rrBrrr) proxyrZr_scheme authorityZhost_separatorendZuserinfohostportuserpasswordrLrLrM _parse_proxys&         r,c@s"eZdZdZdddZddZdS)rdNcCsP|durt}||_|D]\}}|}t|d||||jfddqdS)Nz%s_opencSs ||||SrNrL)rr&rrrLrLrM#rz'ProxyHandler.__init__..)r5proxiesrrxsetattrr)rr0rrHrLrLrMrs zProxyHandler.__init__c Cs|j}t|\}}}}|dur|}|jrt|jrdS|r;|r;dt|t|f} t| d} | dd| t|}| ||||ksM|dkrOdS|j j ||j dS)N%s:%sasciiProxy-authorizationBasic rr)rr,rz proxy_bypassr base64 b64encodeencodedecoderrrrGrJ) rrr&rZ orig_typeZ proxy_typer*r+r)Z user_passZcredsrLrLrMr&s" zProxyHandler.proxy_openrN)rrrrrrrLrLrLrMrs  rc@s6eZdZddZddZddZd dd Zd d Zd S)r cCs i|_dSrN)passwdrrLrLrMrDrzHTTPPasswordMgr.__init__cs\t|tr|g}|jvrij|<dD]tfdd|D}||fj||<qdS)NTFc3s|] }|VqdSrN) reduce_uri)ru default_portrrLrM Ns  z/HTTPPasswordMgr.add_password..)rrr;tuple)rrealmrr*r; reduced_urirLr?rM add_passwordGs   zHTTPPasswordMgr.add_passwordc Cs`|j|i}dD]$}|||}|D]\}}|D]}|||r+|Sqqq dS)Nr<NN)r;rr=r is_suburi) rrCauthuriZdomainsr@reduced_authuriZurisZauthinforrLrLrMfind_user_passwordRs  z"HTTPPasswordMgr.find_user_passwordTc Cs t|}|dr|d}|d}|dpd}nd}|}d}t|\}}|r@|dur@|dur@ddd|} | dur@d|| f}||fS) NrVrr:rPirz%s:%d)rr r) rrr@partsrr'r\rzportZdportrLrLrMr=\s&  zHTTPPasswordMgr.reduce_uricCsP ||krdS|d|dkrdS|d}|dddkr!|d7}|d|S)NTrFrVrSr)r)rbasetestprefixrLrLrMrGsszHTTPPasswordMgr.is_suburiN)T)rrrrrErJr=rGrLrLrLrMr Bs  r c@r)r!cCs0t|||\}}|dur||fSt|d|SrN)r rJ)rrCrHr*r+rLrLrMrJs z2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN)rrrrJrLrLrLrMr!s r!cs<eZdZfddZd fdd Zd ddZdd ZZS) r"csi|_tj|i|dSrN) authenticatedsuperrrrkwargs __class__rLrMrsz%HTTPPasswordMgrWithPriorAuth.__init__Fcs<||||durtd|||t||||dSrN)update_authenticatedrRrE)rrCrr*r;is_authenticatedrUrLrMrEs z)HTTPPasswordMgrWithPriorAuth.add_passwordcCs>t|tr|g}dD]}|D] }|||}||j|<qq dSNr<)rrr=rQ)rrrXr@r>rDrLrLrMrWs   z1HTTPPasswordMgrWithPriorAuth.update_authenticatedcCsDdD]}|||}|jD]}|||r|j|Sq qdSrY)r=rQrG)rrHr@rIrrLrLrMrXs   z-HTTPPasswordMgrWithPriorAuth.is_authenticated)F)rrrrrErWrX __classcell__rLrLrUrMr"s    r"c@sTeZdZedejZdddZddZddZ d d Z d d Z d dZ e Z e ZdS)r#z1(?:^|,)[ ]*([^ ,]+)[ ]+realm=(["']?)([^"']*)\2NcCs"|durt}||_|jj|_dSrN)r r;rE)rZ password_mgrrLrLrMrsz!AbstractBasicAuthHandler.__init__ccsvd}tj|D]}|\}}}|dvrtdtd||fVd}q |s9|r0|d}nd}|dfVdSdS)NF)"'zBasic Auth Realm was unquotedTrrr)r#rxfinditergroupsr?r@ UserWarningsplit)rheaderZfound_challengeZmorr rCrLrLrM _parse_realms  z%AbstractBasicAuthHandler._parse_realmc Cs~||}|s dSd}|D]$}||D]\}}|dkr!|}q|dur0||||Sqq |dur=td|fdS)NbasiczBAbstractBasicAuthHandler does not support the following scheme: %r)Zget_allrdrxretry_http_basic_authrB) rauthreqrzrriZ unsupportedrcrrCrLrLrMhttp_error_auth_reqeds$   z.AbstractBasicAuthHandler.http_error_auth_reqedcCsx|j||\}}|dur:d||f}dt|d}||jd|kr*dS||j||j j ||j dSdS)Nr2r5r3r) r;rJr7r8r9r:ru auth_headerrrrGrJ)rrzrrCr*pwrawauthrLrLrMrfs z.AbstractBasicAuthHandler.retry_http_basic_authcCstt|jdr |j|js|S|ds8|jd|j\}}d||}t | }| dd| |S)NrX Authorizationz{0}:{1}zBasic {}) rr;rXrtrrJrr9r7Zstandard_b64encoder:rstrip)rrr*r;Z credentialsZauth_strrLrLrM http_requests    z%AbstractBasicAuthHandler.http_requestcCsNt|jdr%d|jkrdkrnn |j|jd|S|j|jd|S)NrXrrTF)rr;rrWrt)rrrrLrLrMr s z&AbstractBasicAuthHandler.http_responserN)rrrrecompileIr^rrdrhrfror https_requestrrLrLrLrMr#s   r#c@eZdZdZddZdS)r$rmcC|j}|d|||}|S)Nwww-authenticate)rtrh)rrrhrrrirHrrLrLrMhttp_error_401s z#HTTPBasicAuthHandler.http_error_401N)rrrrirwrLrLrLrMr$ r$c@rt)r%r4cCruNproxy-authenticate)rzrh)rrrhrrrir'rrLrLrMhttp_error_407)s z$ProxyBasicAuthHandler.http_error_407N)rrrrir{rLrLrLrMr%%rxr%c@sNeZdZdddZddZddZdd Zd d Zd d ZddZ ddZ dS)r&NcCs4|durt}||_|jj|_d|_d|_d|_dSNr)r r;rEretried nonce_count last_nonce)rr;rLrLrMrCs  z"AbstractDigestAuthHandler.__init__cC d|_dSr|)r}rrLrLrMreset_retry_countLrz+AbstractDigestAuthHandler.reset_retry_countcCs~||d}|jdkrt|jdd|d|jd7_|r;|d}|dkr/|||S|dkr=td|dSdS) Nizdigest auth failedrVrZdigestrezEAbstractDigestAuthHandler does not support the following scheme: '%s')rr}rrtrbrxretry_http_digest_authrB)rrirzrrirgrrLrLrMrhOs       z/AbstractDigestAuthHandler.http_error_auth_reqedcCsz|dd\}}ttdt|}|||}|r;d|}|j|jd|kr)dS||j||j j ||j d}|SdS)NrrVz Digest %sr) rbparse_keqv_listfilterparse_http_listget_authorizationrirrirrrGrJ)rrrltokenZ challengechalZauth_valZresprLrLrMrcs z0AbstractDigestAuthHandler.retry_http_digest_authcCs@d|j|tf}|dtd}t|}|ddS)Nz %s:%s:%s:r3)r~timectimer9 _randombyteshashlibsha1 hexdigest)rnoncesbdigrLrLrM get_cnonceos z$AbstractDigestAuthHandler.get_cnoncecCsz|d}|d}|d}|dd}|dd}Wn ty%YdSw||\}} |dur3dS|j||j\} } | durCdS|jdurP||j|} nd} d| || f} d||j f}|durt| || d|||f}n=d | d vr||j kr|j d 7_ nd |_ ||_ d |j }| |}d |||d ||f}| || |}ntd|d| |||j |f}|r|d|7}| r|d| 7}|d|7}|r|d||f7}|S)NrCrqop algorithmMD5opaquez%s:%s:%sr2rl,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")rKeyErrorget_algorithm_implsr;rJrtrIget_entity_digestrrrbrr~rr)rrrrCrrrrHKDr*rjZentdigZA1ZA2ZrespdigZncvalueZcnonceZnoncebitrNrLrLrMrzs^            z+AbstractDigestAuthHandler.get_authorizationcsD|dkr ddn|dkrddntd|fdd}|fS)NrcSt|dSNr3)rZmd5r9rxrLrLrMr/z?AbstractDigestAuthHandler.get_algorithm_impls..ZSHAcSrr)rrr9rrrLrLrMr/rz.Unsupported digest authentication algorithm %rcsd||fS)Nr2rL)rdrrLrMr/s)rB)rrrrLrrMrs   z-AbstractDigestAuthHandler.get_algorithm_implscCrrNrL)rrIrrLrLrMrrz+AbstractDigestAuthHandler.get_entity_digestrN) rrrrrrhrrrrrrLrLrLrMr&8s    > r&c@seZdZ dZdZddZdS)r'rmcCs*t|jd}|d|||}||S)NrVrv)rrtrhrrrrhrrrirzretryrLrLrMrws z$HTTPDigestAuthHandler.http_error_401N)rrrrirrwrLrLrLrMr's  r'c@seZdZdZdZddZdS)r(Proxy-AuthorizationrcCs"|j}|d|||}||Sry)rzrhrrrLrLrMr{s z%ProxyDigestAuthHandler.http_error_407N)rrrrirr{rLrLrLrMr(s r(c@s6eZdZd ddZddZddZdd Zd d Zd S)AbstractHTTPHandlerrcCrrN _debuglevel)r debuglevelrLrLrMrrzAbstractHTTPHandler.__init__cCrrNr)rlevelrLrLrMset_http_debuglevelrz'AbstractHTTPHandler.set_http_debuglevelcCstjj|j|SrN)rrHTTPConnection_get_content_lengthrIrrryrLrLrMrsz'AbstractHTTPHandler._get_content_lengthc Cs|j}|s td|jdurI|j}t|trd}t||ds'|dd|dsI|dsI||}|durC|dt|n|dd|}| r\t |j \}}t |\}} |dsg|d||j jD]\} } | } || s~|| | qk|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-urlencodedrTransfer-encodingZchunkedrs)rzrrIrrrrrrrr rr rrr) rryrzrIrZcontent_lengthZsel_hostrZselZsel_pathr_rrLrLrM do_request_sH          zAbstractHTTPHandler.do_request_c sB |j}|s td||fd|ji|}||jt|jfdd|j Ddd<dd D|j rXi}d}|vrP|||<|=|j |j |d z*z|j | |j|j|d d Wnty|}zt|d}~ww|} Wn||jr|jd|_|| _| j| _| S) NrrJcsi|] \}}|vr||qSrLrLrrirLrMr )s z/AbstractHTTPHandler.do_open..r ConnectioncSsi|] \}}||qSrL)title)rr_rrLrLrMr 6srrr)Zencode_chunked)rzrrJZset_debuglevelrrr|updaterirr~Z set_tunnelryrrrIrrq getresponserZsockrrHreasonr) rZ http_classrZhttp_conn_argsrzrZtunnel_headersZproxy_auth_hdrerrr.rLrrMrsH        zAbstractHTTPHandler.do_openNr)rrrrrrrrrLrLrLrMrs   &rc@seZdZddZejZdS)r)cCs|tjj|SrN)rrrrrrrLrLrM http_open`szHTTPHandler.http_openN)rrrrrrrorLrLrLrMr)^s r)rc@s$eZdZdddZddZejZdS)rErNcCst||||_||_dSrN)rr_context_check_hostname)rrr>check_hostnamerLrLrMris  zHTTPSHandler.__init__cCs|jtjj||j|jdS)N)r>r)rrrrrrrrLrLrM https_openns zHTTPSHandler.https_open)rNN)rrrrrrrrsrLrLrLrMrEgs  rEc@s.eZdZdddZddZddZeZeZdS) rNcCs$ddl}|dur |j}||_dSr|)Zhttp.cookiejar cookiejarZ CookieJar)rrrrLrLrMrws  zHTTPCookieProcessor.__init__cCs|j||SrN)rZadd_cookie_headerrrLrLrMro}s z HTTPCookieProcessor.http_requestcCs|j|||SrN)rZextract_cookies)rryrrLrLrMrsz!HTTPCookieProcessor.http_responserN)rrrrrorrsrrLrLrLrMrvs  rc@r)r.cCs|j}td|)Nzunknown url type: %s)rr)rrrrLrLrMrs zUnknownHandler.unknown_openN)rrrrrLrLrLrMr.rr.cCsP i}|D] }|dd\}}|ddkr!|ddkr!|dd}|||<q|S)N=rVrr[rS)rb)lZparsedeltr r rLrLrMrs  rcCs g}d}d}}|D]5}|r||7}d}q |r*|dkrd}q |dkr%d}||7}q |dkr6||d}q |dkrrz#parse_http_list..)ra)rresrescaper ZcurrLrLrMrs6   rc@s(eZdZddZdZddZddZdS)r*cCsZ|j}|dddkr(|dddkr(|jr(|jdkr(|j|vr&tddS||S)Nr:r$r]r localhost-file:// scheme is supported only on localhost)rrz get_namesropen_local_file)rrrHrLrLrM file_opens&  zFileHandler.file_openNcCsftjdur0zttddttdt_WtjStjy/tdft_YtjSwtjS)Nrr:)r*namesrBrgethostbyname_ex gethostnamegaierror gethostbynamerrLrLrMrs  zFileHandler.get_namesc Csddl}ddl}|j}|j}t|}zYt|}|j}|jj |j dd} | |d} | d| p1d|| f} |r?t |\}} |rK| sbt||vrg|rTd||} nd|} tt|d| | WSWtdWtdty{}zt|d}~ww) NrTZusegmtz6Content-type: %s Content-length: %d Last-modified: %s text/plainfile://rbzfile not on local host) email.utils mimetypesrzrr4r[statst_sizeutils formatdatest_mtime guess_typemessage_from_stringr _safe_gethostbynamerrrGrqr)rremailrrzrfZ localfilestatsrmmodifiedmtyperirMZorigurlexprLrLrMrsB    zFileHandler.open_local_file)rrrrrrrrLrLrLrMr*s   r*cCs$zt|WStjyYdSwrN)rrr)rzrLrLrMrs  rc@seZdZddZddZdS)r+c Csddl}ddl}|j}|stdt|\}}|dur|j}nt|}t|\}}|r2t|\}}nd}t |}|p;d}|p?d}zt |}Wnt yW}zt|d}~wwt |j\} } | d} ttt | } | dd| d} } | r| ds| dd} z_|||||| |j} | rdpd}| D]}t|\}}|d kr|d vr|}q| | |\}}d}||jd}|r|d |7}|dur|dkr|d |7}t|}t|||jWS|jy}zt||d}~ww) Nrftp error: no host givenrrrrSrVrrDraArrrrrzContent-type: %s zContent-length: %d )ftplibrrzrr FTP_PORTrbrrr rrrqrrrbrmap connect_ftprJrrxupperretrfilerrtrrr all_errors)rrrrrzrMr*r;rr\attrsdirsrOfwrattrrrhretrlenrirrrLrLrMftp_opensd            zFTPHandler.ftp_openc Cst||||||ddS)NF) persistent) ftpwrapper)rr*r;rzrMrrJrLrLrMr0szFTPHandler.connect_ftpN)rrrrrrLrLrLrMr+s 4r+c@s<eZdZddZddZddZddZd d Zd d Zd S)r,cCs"i|_i|_d|_d|_d|_dS)Nr<r)cacherJsoonestdelay max_connsrrLrLrMr7s  zCacheFTPHandler.__init__cCrrN)r)rtrLrLrM setTimeout>rzCacheFTPHandler.setTimeoutcCrrN)r)rrrLrLrM setMaxConnsArzCacheFTPHandler.setMaxConnscCsr|||d||f}||jvrt|j|j|<nt|||||||j|<t|j|j|<||j|S)Nr)joinrrrrJr check_cache)rr*r;rzrMrrJrrLrLrMrDs    zCacheFTPHandler.connect_ftpcCst}|j|kr(t|jD]\}}||kr'|j||j|=|j|=qtt|j|_t |j|j krat|jD]\}}||jkrT|j|=|j|=nqAtt|j|_dSdSrN) rrrrJrrrminvaluesrdr)rrr r rLrLrMr Os$  zCacheFTPHandler.check_cachecCs0|jD]}|q|j|jdSrN)rr rclearrJ)rconnrLrLrM clear_cachecs  zCacheFTPHandler.clear_cacheN) rrrrrrrr rrLrLrLrMr,4s r,c@r)r-cCs~|j}|dd\}}|dd\}}t|}|dr't|}|dd}|s+d}td|t|f}t t |||S)N:rVrz;base64itext/plain;charset=US-ASCIIz$Content-type: %s Content-length: %d ) rtrbrendswithr7 decodebytesrrrdrioBytesIO)rrrHrrIZ mediatyperirLrLrM data_openjs     zDataHandler.data_openN)rrrrrLrLrLrMr-irr-rnt)r4r3cC t|SrN)r pathnamerLrLrMr4r4cCrrN)r rrLrLrMr3rr3c@seZdZ dZdeZd)ddZddZddZd d Z d d Z d)d dZ d)ddZ d)ddZ d*ddZddZd)ddZd)ddZddZerQddZd)dd Zd!d"Zd#d$Zd%d&Zd)d'd(ZdS)+r8NrcKszdd|jji}tj|tdd|durt}||_|d|_|d|_ d|j fdg|_ g|_ t j|_d|_t|_dS) NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsclassr]) stacklevelkey_file cert_filez User-Agent)ZAcceptz*/*)rVrr?r@rAr5r0rrrversionr_URLopener__tempfilesr[rp_URLopener__unlink tempcacheftpcache)rr0Zx509rrLrLrMrs    zURLopener.__init__cC |dSrN)rrrLrLrM__del__rzURLopener.__del__cCr%rN)cleanuprrLrLrMrrzURLopener.closec CsV|jr|jD]}z||WqtyYqw|jdd=|jr)|jdSdSrN)r!r"rqr#r )rrOrLrLrMr's   zURLopener.cleanupcGs |j|dSrN)rra)rrrLrLrM addheaderszURLopener.addheaderc CsT tt|}t|dd}|jr'||jvr'|j|\}}t|d}t|||St|\}}|s1d}||jvrL|j|}t|\}} t| \} } | |f}nd}d|} ||_ | dd} t || rd| dkrs|rm| |||S| ||Sz|durt|| |WSt|| ||WSttfyty} z td | td d} ~ ww) Nz%/:=&?~#+!$,;'@()*[]|rrrOZopen_-rrz socket errorr:)rrr r#rGrr r0r rr ropen_unknown_proxy open_unknownrrrrqwith_tracebackrexc_info)rrrIrfrirhurltyperHr& proxyhostrzrr_rrLrLrMrGsB            zURLopener.opencCs t|\}}tdd|)N url errorzunknown url typer rq)rrrIrrHrLrLrMr,s  zURLopener.open_unknowncCs t|\}}tdd||)Nr1zinvalid proxy for %sr2)rr&rrIrrHrLrLrMr+s zURLopener.open_unknown_proxycCs tt|}|jr||jvr|j|St|\}}|durF|r$|dkrFz||}|}|tt|d|fWSt yEYnw| ||}z|} |rYt |d} n9t|\} } t| pcd\} } t | pkd\} } t | psd\} } t j| d} t| \}}|j|t |d} zO|| f}|jdur||j|<d}d}d}d}d| vrt| d }|r|||| ||}|sn|t|7}| ||d7}|r||||qW| n| wW|n|w|dkr||krtd ||f||S) NrOrVrPrrrRrSrrTrUrW)rrr#r rrZrr4r rqrGrrr[r\splitextr^Zmkstempr!rafdopenrbrcrdrer)rrHrfrgrIrZurl1rhrrirjZgarbager\suffixfdrkrlrmrcrnrorLrLrMretrievesx                  zURLopener.retrievecCs  d}d}t|trt|\}}|rt|\}}t|}|}n:|\}}t|\}}t|\} } | }d}| dkrr?rirLrLrMrszURLopener.http_error_defaultcCstjj||j|jdS)N)rr)rrrrr)rrzrLrLrM_https_connectionszURLopener._https_connectioncCs ||j||SrN)r:rAr;rLrLrM open_httpsszURLopener.open_httpscCsZ t|ts td|dddkr(|dddkr(|dddkr(td||S) NzEfile error: proxy support for file protocol currently not implementedr:r$r]r z localhost/r)rrrrxrBrrrLrLrM open_files  4 zURLopener.open_filec CsH ddl}ddl}t|\}}t|}zt|}Wnty-}zt|j|j d}~ww|j } |j j |j dd} ||d} |d| pGd| | f} |sf|} |dddkr]d|} tt|d | | St|\}}|st|tftvr|} |dddkrd|} n|dd d krtd |tt|d | | Std )NrTrz6Content-Type: %s Content-Length: %d Last-modified: %s rrVrrrr:z./zAlocal file url may start with / or file:. Unknown url of type: %sz#local file error: not on local host)rrr r4r[rrqrstrerrorrfrrrrrrrrGr rrrthishostrB)rrHrrrzrOZ localnamerermrrriZurlfilerMrLrLrMrsD     zURLopener.open_local_filec Csj t|ts tdddl}t|\}}|stdt|\}}t|\}}|r/t|\}}nd}t|}t|p9d}t|p?d}t |}|sPddl }|j }nt |}t|\}} t|}|d} | dd| d} } | rz| dsz| dd} | r| dsd| d<|||d| f} t|jtkrt|jD]} | | kr|j| }|j| =|qzl| |jvrt||||| |j| <| sd}nd }| D]}t|\}}|d kr|d vr|}q|j| | |\}}|d |d}d}|r|d |7}|dur |dkr |d|7}t|}t||d |WSty4}z td| t!"dd}~ww)NzCftp error: proxy support for ftp protocol currently not implementedrrrrrrSrVrrrrrzftp:zContent-Type: %s zContent-Length: %d z ftp error %rr:)#rrrrr r rrr rrrrrbrrbr rdr$ MAXFTPCACHErrrrrxrrrrrr ftperrorsr-rr.)rrHrrzr\rMr*r;rrrrOrr r rrrrhrrrirrLrLrMopen_ftpsr                  zURLopener.open_ftpc Cs8 t|ts tdz |dd\}}Wn ty tddw|s%d}|d}|dkrEd ||dvrE||dd}|d|}nd }g}|d t d t t|d ||dkrpt | dd}nt|}|dt||d ||d|}t|}t|}t|||S)NzEdata error: proxy support for data protocol currently not implementedrrVz data errorz bad data URLr;rrrrzDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %sr7r3zlatin-1zContent-Length: %d )rrrrbrBrqrfindrarstrftimegmtimer7rr9r:r rdr rrrStringIOr) rrHrIrZsemirrrifrLrLrM open_data1s<            zURLopener.open_datarNNNN)rrrr!rr rr&rr'r(rGr,r+r7r:r<r9rrCrArBrDrrJrRrLrLrLrMr8s0   $  A \    :r8c@seZdZ ddZddZd"ddZdd Zd"d d Zd"d d Zd"ddZ  d#ddZ  d#ddZ d"ddZ d"ddZ d"ddZd"ddZd$ddZd d!ZdS)%r9cOs.tj|g|Ri|i|_d|_d|_dS)Nrr)r8r auth_cachetriesmaxtriesrSrLrLrMr^s zFancyURLopener.__init__cCs t||d||S)Nr8)rr@rLrLrMrdr=z!FancyURLopener.http_error_defaultNc Cs| |jd7_z1|jr*|j|jkr*t|dr|j}n|j}|||dd|Wd|_S|||||||}|Wd|_Sd|_w)NrVhttp_error_500rz)Internal Server Error: Redirect Recursionr)rUrVrrWrredirect_internal) rrHrhr>r?rirIrrkrLrLrMr hs"  zFancyURLopener.http_error_302c Csxd|vr |d}n d|vr|d}ndS|t|jd||}t|}|jdvr7t|||d|||||S)Nrrrrz( Redirection to url '%s' is not allowed.)rrrrrrrG) rrHrhr>r?rirIrrrLrLrMrXzs     z FancyURLopener.redirect_internalcC |||||||SrNr rrHrhr>r?rirIrLrLrMr!zFancyURLopener.http_error_301cCrYrNrZr[rLrLrMr"r\zFancyURLopener.http_error_303cCs0 |dur|||||||S||||||SrN)r rr[rLrLrMr#szFancyURLopener.http_error_307Fc C d|vrt|||||||d}td|} | s%t||||||| \} } | dkr;t|||||||sGt||||||d|jd} |durZt|| || St|| || |S)Nrv![ ]*([^ ]+)[ ]+realm="([^"]*)"reZretry_ _basic_authr8rrpmatchr`rxrr rrHrhr>r?rirIrZstuffrarrCr_rLrLrMrw0      zFancyURLopener.http_error_401c Cr])Nrzr^reZ retry_proxy_r_r`rbrLrLrMr{rczFancyURLopener.http_error_407cCt|\}}d||}|jd}t|\}} t| \} } | dd} | | d} || || \} } | s9| s9dSdt| ddt| dd| f} d| | |jd<|durZ||S|||S)Nhttp://rr%rV%s:%s@%srrr)r r0r rget_user_passwdr rGrrHrCrIrzrrr&r/r0Z proxyselectorrr*r;rLrLrMretry_proxy_http_basic_auth           z*FancyURLopener.retry_proxy_http_basic_authcCrd)Nhttps://rr%rVrfrrr)rgrirLrLrMretry_proxy_https_basic_authrkz+FancyURLopener.retry_proxy_https_basic_authc Ct|\}}|dd}||d}||||\}}|s"|s"dSdt|ddt|dd|f}d||} |dur@|| S|| |S)Nr%rVrfrrr)rer rrhr rG rrHrCrIrzrrr*r;rrLrLrMrf        z$FancyURLopener.retry_http_basic_authc Crn)Nr%rVrfrrr)rlrorprLrLrMretry_https_basic_auth rqz%FancyURLopener.retry_https_basic_authrcCs`|d|}||jvr|r|j|=n|j|S|||\}}|s%|r,||f|j|<||fS)Nr%)rxrTprompt_user_passwd)rrzrCrrr*r;rLrLrMrh s   zFancyURLopener.get_user_passwdcCsT ddl}ztd||f}|d|||f}||fWSty)tYdSw)NrzEnter username for %s at %s: z#Enter password for %s in %s at %s: rF)getpassinputKeyboardInterruptprint)rrzrCrtr*r;rLrLrMrs" s  z!FancyURLopener.prompt_user_passwdrN)NFr)rrrrrr rXr!r"r#rwr{rjrmrfrrrhrsrLrLrLrMr9[s*           r9cC tdur tdatS)Nr) _localhostrrrLrLrLrMr2  rcCsT tdur(ztttdaWtStjy'ttddaYtSwtS)Nr:r) _thishostrBrrrrrLrLrLrMrF: srFcCs tdur ddl}|jatSr|) _ftperrorsrr)rrLrLrMrIE s rIcCrxr) _noheadersrrrLrLrLrM noheadersN rzr~c@sLeZdZ  dddZddZddZd d Zd d Zd dZddZ dS)rNTcCsP||_||_||_||_||_||_d|_||_z|WdS| r|) r*r;rzrMrrJrefcount keepaliveinitr)rr*r;rzrMrrJrrLrLrMr[ szftpwrapper.__init__cCs\ddl}d|_||_|j|j|j|j|j|j |j d |j }|j |dS)Nrr)rbusyZFTPrZconnectrzrMrJZloginr*r;r rcwd)rrZ_targetrLrLrMrk s  zftpwrapper.initc Csddl}||dvrd}d}nd|}d}z|j|Wn|jy3||j|Ynwd}|rs|sszd|}|j|\}}Wn*|jyr}zt|dddkrht d | t d WYd}~nd}~ww|s|jd|r|j } z%z|j|Wn|jy}zt d ||d}~wwW|j| n|j| wd |}nd }|j|\}}d|_t|d |j} |jd7_|| |fS)Nr)rrzTYPE ArVzTYPE zRETR r]Z550z ftp error: %rr:zLIST ZLISTr)r endtransferrZvoidcmdrrZ ntransfercmdZ error_permrrr-rr.pwdrrrZmakefile file_closerr) rrOrrcmdisdirrrrrZftpobjrLrLrMrt sX       zftpwrapper.retrfilecCrr|)rrrLrLrMr rzftpwrapper.endtransfercCs d|_|jdkr|dSdS)NFr)rr real_closerrLrLrMr s  zftpwrapper.closecCs:||jd8_|jdkr|js|dSdSdS)NrVr)rrrrrrLrLrMr s  zftpwrapper.file_closecCs0|z|jWdStyYdSwrN)rrrrIrrLrLrMr s zftpwrapper.real_close)NT) rrrrrrrrrrrLrLrLrMrX s  - rcCs i}g}tjD]3}t|dkr=|ddkr=|dddkr=tj|}|dd}||||f|r=|||<q dtjvrI|dd|D]\}}}|dddkre|r_|||<qK||dqK|S) Nrirr&ZREQUEST_METHODr_proxy)r[environkeysrdrxrar)r0Z environmentr_rZ proxy_namerLrLrMgetproxies_environment s( ,     rcCs |durt}z|d}Wn tyYdSw|dkrdS|}t|\}}|dD]-}|}|r[|d}|}||ksG||krJdSd|}||sX||r[dSq.dS)NZnoF*Tr.)rrrxr rbrnlstripr)rzr0Zno_proxyhostonlyrMr_rLrLrMproxy_bypass_environment s0    rc Cs2 ddlm}ddlm}m}t|\}}dd}d|vr#|dr#dSd}zt||}Wn |y6Ynw|d d D]Y} | sBq=td | } | dur|dur|| d } | d } | durmd| d  dd } nt| d d} | dks}| dkr~q=d| } || ?| | ?krdSq=||| rdSq=dS)Nrfnmatch)AddressValueError IPv4AddresscSsd|d}ttt|}t|dkr|gddd}|dd>|dd>B|dd >B|d BS) Nrr)rrrrrrVrr:rr])rbrrrbrd)ZipAddrrLrLrLrMip2num s  ,z,_proxy_bypass_macosx_sysconf..ip2numrZexclude_simpleT exceptionsrLz(\d+(?:\.\d+)*)(/\d+)?rVr:r F) rZ ipaddressrrr rbrrpragroupcount) rzproxy_settingsrrrrrMrZhostIPrrrNmaskrLrLrM_proxy_bypass_macosx_sysconf sB      rcCsb ddlm}t|\}}|d}|D]}|}|dkr&d|vr%dSq|||r.dSqdS)NrrrKzrTF)rr rbrn)rzoverriderrZproxy_overriderOrLrLrM_proxy_bypass_winreg_overrideA s    rdarwin)_get_proxy_settings _get_proxiescCst}t||SrN)rr)rzrrLrLrMproxy_bypass_macosx_sysconf\ s rcCs tSrN)rrLrLrLrMgetproxies_macosx_sysconf` srcC t}|r t||St|SrN)rrrrzr0rLrLrMr6j  r6cCs tptSrN)rrrLrLrLrMr5w rr5c Cs: i}zddl}Wn ty|YSwzz||jd}||dd}|rt||dd}d|vr>d|vr>d|}|dD]%}|dd\}}t d |sd|d vr\d |}n|d krdd |}|||<qC| d rt dd|d }| dp}||d<| dp||d<| W|St ttfyY|Sw)Nr;Software\Microsoft\Windows\CurrentVersion\Internet Settings ProxyEnableZ ProxyServerrrKzhttp={0};https={0};ftp={0}rVz (?:[^/:]+)://)rrrreZsockszsocks://z ^socks://z socks4://rr)winreg ImportErrorOpenKeyHKEY_CURRENT_USER QueryValueExrrrbrprarrwZCloserqrBr)r0rinternetSettings proxyEnableZ proxyServerprZaddressrLrLrMgetproxies_registry| sT        rcCs tptSrN)rrrLrLrLrMr5 s cCszddl}Wn tyYdSwz||jd}||dd}t||dd}Wn ty6YdSw|r;|s=dSt||S)NrFrrZ ProxyOverride)rrrrrrrqr)rzrrrZ proxyOverriderLrLrMproxy_bypass_registry s2    rcCrrN)rrrrrLrLrMr6 rrSrN)~r7rrrZ http.clientrrr[ posixpathrprrrrr^rXr?Z urllib.errorrrrZ urllib.parserrrrr r r r r rrrrrrrrrZurllib.responserrrDrrC__all__ version_inforrFrr0r1r`r6r7rqASCIIrvr{rrr2rr/rrr,rr r!r"r#r$r%urandomrr&r'r(rr)rrrErarr.rrr*rr+r,r-rHr_Z nturl2pathr4r3r$r8r9ryrr{rFr|rIr}r~rrrrrplatformZ_scproxyrrrrr6r5rrrLrLrLrMsSP   O ?m$q!+@ o  v  +395! @W  _ %%@  1