ž ¨ÿfóqc'@s‰dZddlZddlZddlZddlZddlZddlZddlZddl 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'ddl(m)Z)m*Z*yddl+Z+Wne,k r’e-Z.YnXe/Z.dddd d d d d ddddddddddddddddddd d!d"d#d$gZ0e j1dd%…Z2e3a4d&e3d'e3d(e-e3e j5d)d„Z6d*d„Z7gZ8e3e3e3d+d!„Z9d,d"„Z:e j;d-e j<ƒZ=d.d/„Z>Gd0d„dƒZ?Gd1d„dƒZ@d2d„ZAGd3d„dƒZBGd4d„deBƒZCGd5d „d eBƒZDGd6d „d eBƒZEd7d8„ZFGd9d „d eBƒZGGd:d „d ƒZHGd;d„deHƒZIGd<d„dƒZJGd=d„deJeBƒZKGd>d„deJeBƒZLejMZNGd?d„dƒZOGd@d„deBeOƒZPGdAd„deBeOƒZQGdBdC„dCeBƒZRGdDd„deRƒZSeTejUdEƒrYGdFdG„dGeRƒZVe0jWdGƒnGdHd „d eBƒZXGdId„deBƒZYdJdK„ZZdLdM„Z[GdNd„deBƒZ\dOdP„Z]GdQd„deBƒZ^GdRd„de^ƒZ_dSZ`ejadTkrddUlbmcZcmdZdndVd„ZcdWd„ZdiZeGdXd#„d#ƒZfGdYd$„d$efƒZge3ahdZd[„Zie3ajd\d]„Zke3ald^d_„Zme3and`da„ZoGdbdc„dcƒZpddde„Zqdfdg„Zrdhdi„Zse jtdjkr7ddklumvZvmwZwdldm„Zxdndo„Zydpdq„Zzdrd „Z{nNejadTkrydsdt„Z|dud „Z{dvdw„Z}dxdq„Zzn eqZ{erZzdS(yuš An extensible library for opening URLs using a variety of protocols The simplest way to use this module is to call the urlopen function, which accepts a string containing a URL or a Request object (described below). It opens the URL and returns the results as file-like object; the returned object has some extra methods described below. The OpenerDirector manages a collection of Handler objects that do all the actual work. Each Handler implements a particular protocol or option. The OpenerDirector is a composite object that invokes the Handlers needed to open the requested URL. For example, the HTTPHandler performs HTTP GET and POST requests and deals with non-error returns. The HTTPRedirectHandler automatically deals with HTTP 301, 302, 303 and 307 redirect errors, and the HTTPDigestAuthHandler deals with digest authentication. urlopen(url, data=None) -- Basic usage is the same as original urllib. pass the url and optionally data to post to an HTTP URL, and get a file-like object back. One difference is that you can also pass a Request instance instead of URL. Raises a URLError (subclass of IOError); for HTTP errors, raises an HTTPError, which can also be treated as a valid response. build_opener -- Function that creates a new OpenerDirector instance. Will install the default handlers. Accepts one or more Handlers as arguments, either instances or Handler classes that it will instantiate. If one of the argument is a subclass of the default handler, the argument will be installed instead of the default. install_opener -- Installs a new opener as the default opener. objects of interest: OpenerDirector -- Sets up the User Agent as the Python-urllib client and manages the Handler classes, while dealing with requests and responses. Request -- An object that encapsulates the state of a request. The state can be as simple as the URL. It can also include extra HTTP headers, e.g. a User-Agent. BaseHandler -- internals: BaseHandler and parent _call_chain conventions Example usage: import urllib.request # set up authentication info authinfo = urllib.request.HTTPBasicAuthHandler() authinfo.add_password(realm='PDQ Application', uri='https://mahler:8092/site-updates.py', user='klem', passwd='geheim$parole') proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"}) # build a new opener that adds authentication and caching FTP handlers opener = urllib.request.build_opener(proxy_support, authinfo, urllib.request.CacheFTPHandler) # install it urllib.request.install_opener(opener) f = urllib.request.urlopen('http://www.python.org/') iN(uURLErroru HTTPErroruContentTooShortError(uurlparseuurlsplituurljoinuunwrapuquoteuunquoteu splittypeu splithostu splitportu splituseru splitpasswdu splitattru splitqueryu splitvalueusplittaguto_bytesu urlunparse(u addinfourlu addclosehookuRequestuOpenerDirectoru BaseHandleruHTTPDefaultErrorHandleruHTTPRedirectHandleruHTTPCookieProcessoru ProxyHandleruHTTPPasswordMgruHTTPPasswordMgrWithDefaultRealmuAbstractBasicAuthHandleruHTTPBasicAuthHandleruProxyBasicAuthHandleruAbstractDigestAuthHandleruHTTPDigestAuthHandleruProxyDigestAuthHandleru HTTPHandleru FileHandleru FTPHandleruCacheFTPHandleruUnknownHandleruHTTPErrorProcessoruurlopenuinstall_openeru build_openeru pathname2urlu url2pathnameu getproxiesu urlretrieveu urlcleanupu URLopeneruFancyURLopeneriucafileucapathu cadefaultc CsÙ|s|s|r¤ts'tdƒ‚ntjtjƒ}|jtjO_tj|_|sc|rv|j ||ƒn |j ƒt d|ddƒ}t |ƒ}n"tdkrÀt ƒa}nt}|j|||ƒS(NuSSL support not availableucontextucheck_hostnameT(u _have_sslu ValueErrorusslu SSLContextuPROTOCOL_SSLv23uoptionsu OP_NO_SSLv2u CERT_REQUIREDu verify_modeuload_verify_locationsuset_default_verify_pathsu HTTPSHandleruTrueu build_openeru_openeruNoneuopen( uurludatautimeoutucafileucapathu cadefaultucontextu https_handleruopener((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuurlopen‰s    cCs |adS(N(u_opener(uopener((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuinstall_openeržscCs¨t|ƒ\}}tjt||ƒƒD}|jƒ}|dkrb| rbtjj|ƒ|fS|rzt|dƒ}n(t j dd ƒ}|j }t j|ƒ|À||f} d } d} d} d} d|krìt|d ƒ} n|r|| | | ƒnx\|j| ƒ}|s!Pn| t|ƒ7} |j|ƒ| d7} |r|| | | ƒqqWd QXWd QX| dkr¤| | kr¤td | | f| ƒ‚n| S(uW Retrieve a URL into a temporary location on disk. Requires a URL argument. If a filename is passed, it is used as the temporary file location. The reporthook argument should be a callable that accepts a block number, a read size, and the total file size of the URL target. The data argument should be valid URL encoded data. If a filename is passed and the URL points to a local resource, the result is a copy from local file to new file. Returns a tuple containing the path to the newly created data file as well as the resulting HTTPMessage object. ufileuwbudeleteiiiiucontent-lengthuContent-LengthNu1retrieval incomplete: got only %i out of %i bytesFi iÿÿÿÿ(u splittypeu contextlibuclosinguurlopenuinfouosupathunormpathuopenutempfileuNamedTemporaryFileuFalseunameu_url_tempfilesuappenduintureadulenuwriteuContentTooShortError(uurlufilenameu reporthookudatauurl_typeupathufpuheadersutfpuresultubsusizeureadublocknumublock((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu urlretrieve£sD       "c CsWx4tD],}ytj|ƒWqtk r2YqXqWtdd…=trSdandS(N(u_url_tempfilesuosuunlinkuEnvironmentErroru_openeruNone(u temp_file((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu urlcleanupâs    u:\d+$cCsY|j}t|ƒd}|dkr:|jddƒ}ntjd|dƒ}|jƒS(uˆReturn request-host, as defined by RFC 2965. Variation from RFC: returned value is lowercased, for convenient comparison. iuuHost(ufull_urluurlparseu get_headeru _cut_port_reusubulower(urequestuurluhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu request_hostðs   u request_hostcBs |EeZdZd'id'd(d'dd„Zdd„Zdd„Zdd„Zd d „Z d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd'd#d$„Zd%d&„Zd'S()uRequestc Cs¿t|ƒ|_t|jƒ\|_|_||_i|_d|_x*|jƒD]\}}|j ||ƒqRWi|_ |dkr–t |ƒ}n||_ ||_ ||_|jƒdS(N(uunwrapufull_urlusplittagufragmentudatauheadersuNoneu _tunnel_hostuitemsu add_headeruunredirected_hdrsu request_hostuorigin_req_hostu unverifiableumethodu_parse( uselfuurludatauheadersuorigin_req_hostu unverifiableumethodukeyuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s        uRequest.__init__cCswt|jƒ\|_}|jdkr=td|jƒ‚nt|ƒ\|_|_|jrst|jƒ|_ndS(Nuunknown url type: %r( u splittypeufull_urlutypeuNoneu ValueErroru splithostuhostuselectoruunquote(uselfurest((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_parses  uRequest._parsecCs1|jdk r|jS|jdk r)dSdSdS(u3Return a string indicating the HTTP request method.uPOSTuGETN(umethoduNoneudata(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_methods uRequest.get_methodcCs(|jrd|j|jfS|jSdS(Nu%s#%s(ufragmentufull_url(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_full_url&s uRequest.get_full_urlcCs)d}tj|tddƒ||_dS(Nu&Request.add_data method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningudata(uselfudataumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuadd_data.suRequest.add_datacCs)d}tj|tddƒ|jdk S(Nu&Request.has_data method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningudatauNone(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhas_data3suRequest.has_datacCs#d}tj|tddƒ|jS(Nu&Request.get_data method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningudata(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_data8suRequest.get_datacCs#d}tj|tddƒ|jS(Nu&Request.get_type method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningutype(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_type=suRequest.get_typecCs#d}tj|tddƒ|jS(Nu&Request.get_host method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarninguhost(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_hostBsuRequest.get_hostcCs#d}tj|tddƒ|jS(Nu*Request.get_selector method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarninguselector(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_selectorGsuRequest.get_selectorcCs#d}tj|tddƒ|jS(Nu-Request.is_unverifiable method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarningu unverifiable(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuis_unverifiableLsuRequest.is_unverifiablecCs#d}tj|tddƒ|jS(Nu1Request.get_origin_req_host method is deprecated.u stackleveli(uwarningsuwarnuDeprecationWarninguorigin_req_host(uselfumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_origin_req_hostQsuRequest.get_origin_req_hostcCsJ|jdkr(|j r(|j|_n||_|j|_||_dS(Nuhttps(utypeu _tunnel_hostuhostufull_urluselector(uselfuhostutype((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu set_proxyXs   uRequest.set_proxycCs|j|jkS(N(uselectorufull_url(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu has_proxy`suRequest.has_proxycCs||j|jƒ.isclassuHTTPSConnection(uOpenerDirectoru ProxyHandleruUnknownHandleru HTTPHandleruHTTPDefaultErrorHandleruHTTPRedirectHandleru FTPHandleru FileHandleruHTTPErrorProcessoruhasattruhttpuclientuappendu HTTPSHandlerusetu issubclassuaddu isinstanceuremoveu add_handler(uhandlersuisclassuopenerudefault_classesuskipuklassucheckuh((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu build_openers0            cBs>|EeZdZdZdd„Zdd„Zdd„ZdS( u BaseHandleriôcCs ||_dS(N(uparent(uselfuparent((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu add_parent0suBaseHandler.add_parentcCsdS(N((uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuclose3suBaseHandler.closecCs#t|dƒsdS|j|jkS(Nu handler_orderT(uhasattruTrueu handler_order(uselfuother((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__lt__7suBaseHandler.__lt__N(u__name__u __module__u __qualname__u handler_orderu add_parentucloseu__lt__(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu BaseHandler-s  cBs2|EeZdZdZdZdd„ZeZdS(uHTTPErrorProcessoruProcess HTTP error responses.iècCsd|j|j|jƒ}}}d|ko7dkns`|jjd|||||ƒ}n|S(NiÈi,uhttp(ucodeumsguinfouparentuerror(uselfurequesturesponseucodeumsguhdrs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_responseDs   u HTTPErrorProcessor.http_responseN(u__name__u __module__u __qualname__u__doc__u handler_orderu http_responseuhttps_response(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPErrorProcessor@s cBs |EeZdZdd„ZdS(uHTTPDefaultErrorHandlercCst|j||||ƒ‚dS(N(u HTTPErrorufull_url(uselfurequfpucodeumsguhdrs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_defaultRsu*HTTPDefaultErrorHandler.http_error_defaultN(u__name__u __module__u __qualname__uhttp_error_default(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPDefaultErrorHandlerQscBsL|EeZdZdZdZdd„Zdd„ZeZZZ dZ dS( uHTTPRedirectHandlerii c s¹|jƒ}|dkr$|dkp9|dko9|dksZt|j||||ƒ‚n|jdd ƒ}d‰t‡fd d †|jjƒDƒƒ}t|d|d|jddƒS(u­Return a Request or None in response to a redirect. This is called by the http_error_30x methods when a redirection response is received. If a redirection should take place, return a new Request to allow http_error_30x to perform the redirect. Otherwise, raise HTTPError if no-one else should try to handle this url. Return None if you can't but another Handler might. i-i.i/i3uGETuHEADuPOSTu u%20ucontent-lengthu content-typec3s3|])\}}|jƒˆkr||fVqdS(N(ulower(u.0ukuv(uCONTENT_HEADERS(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ts u7HTTPRedirectHandler.redirect_request..uheadersuorigin_req_hostu unverifiable(i-i.i/i3(uGETuHEAD(i-i.i/(ucontent-lengthu content-typeT( u get_methodu HTTPErrorufull_urlureplaceudictuheadersuitemsuRequestuorigin_req_hostuTrue( uselfurequfpucodeumsguheadersunewurlumu newheaders((uCONTENT_HEADERSu3/opt/alt/python33/lib64/python3.3/urllib/request.pyuredirect_request]s (  u$HTTPRedirectHandler.redirect_requestc Cs¶d|kr|d}nd|kr2|d}ndSt|ƒ}|jdkrvt||d||f||ƒ‚n|js˜t|ƒ}d|d >> _parse_proxy('file:/ftp.example.com/') Traceback (most recent call last): ValueError: proxy URL with no authority: 'file:/ftp.example.com/' The first three items of the returned tuple may be None. Examples of authority parsing: >>> _parse_proxy('proxy.example.com') (None, None, None, 'proxy.example.com') >>> _parse_proxy('proxy.example.com:3128') (None, None, None, 'proxy.example.com:3128') The authority component may optionally include userinfo (assumed to be username:password): >>> _parse_proxy('joe:password@proxy.example.com') (None, 'joe', 'password', 'proxy.example.com') >>> _parse_proxy('joe:password@proxy.example.com:3128') (None, 'joe', 'password', 'proxy.example.com:3128') Same examples, but with URLs instead: >>> _parse_proxy('http://proxy.example.com/') ('http', None, None, 'proxy.example.com') >>> _parse_proxy('http://proxy.example.com:3128/') ('http', None, None, 'proxy.example.com:3128') >>> _parse_proxy('http://joe:password@proxy.example.com/') ('http', 'joe', 'password', 'proxy.example.com') >>> _parse_proxy('http://joe:password@proxy.example.com:3128') ('http', 'joe', 'password', 'proxy.example.com:3128') Everything after the authority is ignored: >>> _parse_proxy('ftp://joe:password@proxy.example.com/rubbish:3128') ('ftp', 'joe', 'password', 'proxy.example.com') Test for no trailing '/' case: >>> _parse_proxy('http://joe:password@proxy.example.com') ('http', 'joe', 'password', 'proxy.example.com') u/u//uproxy URL with no authority: %riiNiÿÿÿÿ(u splittypeu startswithuNoneu ValueErrorufindu splituseru splitpasswd( uproxyuschemeur_schemeu authorityuenduuserinfouhostportuuserupassword((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu _parse_proxy½s2     u _parse_proxycBs5|EeZdZdZddd„Zdd„ZdS(u ProxyHandleridc Csƒ|dkrtƒ}nt|dƒs3tdƒ‚||_x@|jƒD]2\}}t|d||||jdd„ƒqIWdS(Nukeysuproxies must be a mappingu%s_opencSs||||ƒS(N((uruproxyutypeumeth((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyusu'ProxyHandler.__init__..(uNoneu getproxiesuhasattruAssertionErroruproxiesuitemsusetattru proxy_open(uselfuproxiesutypeuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__ s    uProxyHandler.__init__c Cs|j}t|ƒ\}}}}|dkr6|}n|jrRt|jƒrRdS|r¯|r¯dt|ƒt|ƒf} tj| jƒƒj dƒ} |j dd| ƒnt|ƒ}|j ||ƒ||ksã|dkrçdS|j j |d|jƒSdS(Nu%s:%suasciiuProxy-authorizationuBasic uhttpsutimeout(utypeu _parse_proxyuNoneuhostu proxy_bypassuunquoteubase64u b64encodeuencodeudecodeu add_headeru set_proxyuparentuopenutimeout( uselfurequproxyutypeu orig_typeu proxy_typeuuserupassworduhostportu user_passucreds((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu proxy_opens       uProxyHandler.proxy_openN(u__name__u __module__u __qualname__u handler_orderuNoneu__init__u proxy_open(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ProxyHandlers cBsS|EeZdZdd„Zdd„Zdd„Zd dd„Zd d „Zd S( uHTTPPasswordMgrcCs i|_dS(N(upasswd(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__1suHTTPPasswordMgr.__init__csˆt|tƒr|g}n|ˆjkr:iˆj|<s u0HTTPPasswordMgr.add_password..TF(TF(u isinstanceustrupasswduTrueuFalseutuple(uselfurealmuuriuuserupasswdu reduced_uri((u default_portuselfu3/opt/alt/python33/lib64/python3.3/urllib/request.pyu add_password4s  uHTTPPasswordMgr.add_passwordc Cs€|jj|iƒ}xddD]\}|j||ƒ}xA|jƒD]3\}}x$|D]}|j||ƒrT|SqTWqAWqWdS(NTF(TF(NN(upasswdugetuTrueuFalseu reduce_uriuitemsu is_suburiuNone( uselfurealmuauthuriudomainsu default_portureduced_authuriuurisuauthinfouuri((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyufind_user_password?s  u"HTTPPasswordMgr.find_user_passwordc CsÈt|ƒ}|dr=|d}|d}|dp7d}nd }|}d}t|ƒ\}}|r¾|d kr¾|d k r¾idd6dd6j|ƒ} | d k r¾d || f}q¾n||fS( u@Accept authority or URI and extract only the authority and path.iiiu/iPuhttpi»uhttpsu%s:%dN(uurlsplituNoneu splitportuget( uselfuuriu default_portupartsuschemeu authorityupathuhostuportudport((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu reduce_uriIs         uHTTPPasswordMgr.reduce_uricCsi||krdS|d|dkr(dStj|d|dfƒ}t|ƒt|dƒkredSdS(ucCheck if test is below base in a URI tree Both args must be URIs in reduced form. iiTF(uTrueuFalseu posixpathu commonprefixulen(uselfubaseutestucommon((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu is_suburi`s uHTTPPasswordMgr.is_suburiNT( u__name__u __module__u __qualname__u__init__u add_passwordufind_user_passworduTrueu reduce_uriu is_suburi(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPPasswordMgr/s   cBs |EeZdZdd„ZdS(uHTTPPasswordMgrWithDefaultRealmcCsDtj|||ƒ\}}|dk r1||fStj|d|ƒS(N(uHTTPPasswordMgrufind_user_passworduNone(uselfurealmuauthuriuuserupassword((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyufind_user_passwordqs    u2HTTPPasswordMgrWithDefaultRealm.find_user_passwordN(u__name__u __module__u __qualname__ufind_user_password(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPPasswordMgrWithDefaultRealmoscBs\|EeZdZejdejƒZd dd„Zdd„Z dd„Z dd „Z d S( uAbstractBasicAuthHandleru1(?:.*,)*[ ]*([^ ]+)[ ]+realm=(["']?)([^"']*)\2cCs=|dkrtƒ}n||_|jj|_d|_dS(Ni(uNoneuHTTPPasswordMgrupasswdu add_passworduretried(uselfu password_mgr((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__‡s    u!AbstractBasicAuthHandler.__init__cCs d|_dS(Ni(uretried(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyureset_retry_countŽsu*AbstractBasicAuthHandler.reset_retry_countc Cs1|j|dƒ}|jdkrBt|jƒdd|dƒ‚n|jd7_|r-|jƒd}|jƒdkrŒtd|ƒ‚q-tj j |ƒ}|r-|j ƒ\}}}|d krÛt j d td ƒn|jƒdkr*|j|||ƒ} | r#| jdkr#d|_n| Sq-ndS( Nii‘ubasic auth failediiubasicuDAbstractBasicAuthHandler does not support the following scheme: '%s'u"u'uBasic Auth Realm was unquotedi(u"u'(ugetuNoneuretriedu HTTPErroru get_full_urlusplituloweru ValueErroruAbstractBasicAuthHandlerurxusearchugroupsuwarningsuwarnu UserWarninguretry_http_basic_authucode( uselfuauthrequhosturequheadersuschemeumouquoteurealmuresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_auth_reqed‘s*     u.AbstractBasicAuthHandler.http_error_auth_reqedcCs¯|jj||ƒ\}}|dk r§d||f}dtj|jƒƒjdƒ}|jj|j dƒ|kr{dS|j |j |ƒ|j j |d|j ƒSdSdS(Nu%s:%suBasic uasciiutimeout(upasswdufind_user_passworduNoneubase64u b64encodeuencodeudecodeuheadersugetu auth_headeruadd_unredirected_headeruparentuopenutimeout(uselfuhosturequrealmuuserupwurawuauth((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_http_basic_auth±s "u.AbstractBasicAuthHandler.retry_http_basic_authN( u__name__u __module__u __qualname__ureucompileuIurxuNoneu__init__ureset_retry_countuhttp_error_auth_reqeduretry_http_basic_auth(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuAbstractBasicAuthHandlerys     cBs&|EeZdZdZdd„ZdS(uHTTPBasicAuthHandleru AuthorizationcCs/|j}|jd|||ƒ}|jƒ|S(Nuwww-authenticate(ufull_urluhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuurluresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_401Âs    u#HTTPBasicAuthHandler.http_error_401N(u__name__u __module__u __qualname__u auth_headeruhttp_error_401(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPBasicAuthHandler¾scBs&|EeZdZdZdd„ZdS(uProxyBasicAuthHandleruProxy-authorizationcCs/|j}|jd|||ƒ}|jƒ|S(Nuproxy-authenticate(uhostuhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersu authorityuresponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407Îs    u$ProxyBasicAuthHandler.http_error_407N(u__name__u __module__u __qualname__u auth_headeruhttp_error_407(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuProxyBasicAuthHandlerÊscBsw|EeZdZddd„Zdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dS(uAbstractDigestAuthHandlercCsO|dkrtƒ}n||_|jj|_d|_d|_d|_dS(Ni(uNoneuHTTPPasswordMgrupasswdu add_passworduretriedu nonce_countu last_nonce(uselfupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__és     u"AbstractDigestAuthHandler.__init__cCs d|_dS(Ni(uretried(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyureset_retry_countòsu+AbstractDigestAuthHandler.reset_retry_countcCs²|j|dƒ}|jdkr?t|jdd|dƒ‚n|jd7_|r®|jƒd}|jƒdkr†|j||ƒS|jƒdkr®td|ƒ‚q®ndS( Nii‘udigest auth failediiudigestubasicuEAbstractDigestAuthHandler does not support the following scheme: '%s'( ugetuNoneuretriedu HTTPErrorufull_urlusplituloweruretry_http_digest_authu ValueError(uselfu auth_headeruhosturequheadersuauthrequscheme((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_auth_reqedõsu/AbstractDigestAuthHandler.http_error_auth_reqedcCs­|jddƒ\}}ttdt|ƒƒƒ}|j||ƒ}|r©d|}|jj|jdƒ|krwdS|j |j|ƒ|j j |d|j ƒ}|SdS(Nu iu Digest %sutimeout( usplituparse_keqv_listufilteruNoneuparse_http_listuget_authorizationuheadersugetu auth_headeruadd_unredirected_headeruparentuopenutimeout(uselfurequauthutokenu challengeuchaluauth_valuresp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_http_digest_auth s u0AbstractDigestAuthHandler.retry_http_digest_authcCsXd|j|tjƒf}|jdƒtdƒ}tj|ƒjƒ}|dd…S(Nu %s:%s:%s:uasciiii(u nonce_countutimeuctimeuencodeu _randombytesuhashlibusha1u hexdigest(uselfunonceusubudig((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_cnoncesu$AbstractDigestAuthHandler.get_cnoncecCs_yK|d}|d}|jdƒ}|jddƒ}|jddƒ}Wntk rcdSYnX|j|ƒ\}} |dkr‰dS|jj||jƒ\} } | dkr·dS|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ƒ}ntd |ƒ‚d| |||j |f}|r|d|7}n| r0|d| 7}n|d|7}|r[|d||f7}n|S(Nurealmunonceuqopu algorithmuMD5uopaqueu%s:%s:%su%s:%suauthiu%08xu%s:%s:%s:%s:%suqop '%s' is not supported.u>username="%s", realm="%s", nonce="%s", uri="%s", response="%s"u , opaque="%s"u , digest="%s"u, algorithm="%s"u, qop=auth, nc=%s, cnonce="%s"(ugetuNoneuKeyErroruget_algorithm_implsupasswdufind_user_passwordufull_urludatauget_entity_digestu get_methoduselectoru last_nonceu nonce_countu get_cnonceuURLError(uselfurequchalurealmunonceuqopu algorithmuopaqueuHuKDuuserupwuentdiguA1uA2uncvalueucnonceunoncebiturespdigubase((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_authorization sV             ( u+AbstractDigestAuthHandler.get_authorizationcsR|dkrdd„‰n|dkr6dd„‰n‡fdd†}ˆ|fS(NuMD5cSstj|jdƒƒjƒS(Nuascii(uhashlibumd5uencodeu hexdigest(ux((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_su?AbstractDigestAuthHandler.get_algorithm_impls..uSHAcSstj|jdƒƒjƒS(Nuascii(uhashlibusha1uencodeu hexdigest(ux((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuascsˆd||fƒS(Nu%s:%s((usud(uH(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyucs((uselfu algorithmuKD((uHu3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_algorithm_impls\s   u-AbstractDigestAuthHandler.get_algorithm_implscCsdS(N(uNone(uselfudatauchal((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuget_entity_digestfsu+AbstractDigestAuthHandler.get_entity_digestN( u__name__u __module__u __qualname__uNoneu__init__ureset_retry_countuhttp_error_auth_reqeduretry_http_digest_authu get_cnonceuget_authorizationuget_algorithm_implsuget_entity_digest(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuAbstractDigestAuthHandlerÞs    < cBs2|EeZdZdZdZdZdd„ZdS(uHTTPDigestAuthHandleru¨An authentication protocol defined by RFC 2069 Digest authentication improves on basic authentication because it does not transmit passwords in the clear. u AuthorizationiêcCs9t|jƒd}|jd|||ƒ}|jƒ|S(Niuwww-authenticate(uurlparseufull_urluhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuhosturetry((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_401us   u$HTTPDigestAuthHandler.http_error_401N(u__name__u __module__u __qualname__u__doc__u auth_headeru handler_orderuhttp_error_401(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPDigestAuthHandlerkscBs,|EeZdZdZdZdd„ZdS(uProxyDigestAuthHandleruProxy-AuthorizationiêcCs/|j}|jd|||ƒ}|jƒ|S(Nuproxy-authenticate(uhostuhttp_error_auth_reqedureset_retry_count(uselfurequfpucodeumsguheadersuhosturetry((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407‚s    u%ProxyDigestAuthHandler.http_error_407N(u__name__u __module__u __qualname__u auth_headeru handler_orderuhttp_error_407(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuProxyDigestAuthHandler}scBsG|EeZdZddd„Zdd„Zdd„Zdd „Zd S( uAbstractHTTPHandlericCs ||_dS(N(u _debuglevel(uselfu debuglevel((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__‹suAbstractHTTPHandler.__init__cCs ||_dS(N(u _debuglevel(uselfulevel((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuset_http_debuglevelŽsu'AbstractHTTPHandler.set_http_debuglevelc Csµ|j}|stdƒ‚n|jdk r|j}t|tƒrZd}t|ƒ‚n|jdƒs||jddƒn|jdƒsyt |ƒ}WnCtk ràt|t j ƒrÜt dt |ƒ|fƒ‚nYqX|jddt|ƒ|jƒqn|}|jƒrDt|jƒ\}}t|ƒ\}} n|jdƒsf|jd|ƒnxH|jjD]:\} } | jƒ} |j| ƒss|j| | ƒqsqsW|S( Nu no host givenuLPOST data should be bytes or an iterable of bytes. It cannot be of type str.u Content-typeu!application/x-www-form-urlencodeduContent-lengthuBContent-Length should be specified for iterable data of type %r %ru%duHost(uhostuURLErrorudatauNoneu isinstanceustru TypeErroru has_headeruadd_unredirected_headeru memoryviewu collectionsuIterableu ValueErrorutypeulenuitemsizeu has_proxyu splittypeuselectoru splithostuparentu addheadersu capitalize( uselfurequestuhostudataumsgumvusel_hostuschemeuselusel_pathunameuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu do_request_‘sB     !  uAbstractHTTPHandler.do_request_c  s£|j}|stdƒ‚n||d|j|}t|jƒ‰ˆjt‡fdd†|jjƒDƒƒƒdˆdtjk rU}z|jƒt|ƒ‚WYd d }~Xn/X|jƒ} |jr„|jjƒd |_n|jƒ| _| j| _| S( u•Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. u no host givenutimeoutc3s-|]#\}}|ˆkr||fVqdS(N((u.0ukuv(uheaders(u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu Æs u.AbstractHTTPHandler.do_open..ucloseu Connectioncss'|]\}}|jƒ|fVqdS(N(utitle(u.0unameuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu ÓsuProxy-AuthorizationuheadersN(uhostuURLErrorutimeoutudictuunredirected_hdrsuupdateuheadersuitemsu _tunnel_hostu set_tunnelurequestu get_methoduselectorudatausocketuerrorucloseu getresponseusockuNoneu get_full_urluurlureasonumsg( uselfu http_classurequhttp_conn_argsuhostuhutunnel_headersuproxy_auth_hdruerrur((uheadersu3/opt/alt/python33/lib64/python3.3/urllib/request.pyudo_open¹s6 /    &      uAbstractHTTPHandler.do_openN(u__name__u __module__u __qualname__u__init__uset_http_debuglevelu do_request_udo_open(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuAbstractHTTPHandler‰s  (uAbstractHTTPHandlercBs)|EeZdZdd„ZejZdS(u HTTPHandlercCs|jtjj|ƒS(N(udo_openuhttpuclientuHTTPConnection(uselfureq((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_openùsuHTTPHandler.http_openN(u__name__u __module__u __qualname__u http_openuAbstractHTTPHandleru do_request_u http_request(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu HTTPHandler÷s uHTTPSConnectioncBs>|EeZdZddddd„Zdd„ZejZdS(u HTTPSHandlericCs&tj||ƒ||_||_dS(N(uAbstractHTTPHandleru__init__u_contextu_check_hostname(uselfu debuglevelucontextucheck_hostname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s uHTTPSHandler.__init__cCs(|jtjj|d|jd|jƒS(Nucontextucheck_hostname(udo_openuhttpuclientuHTTPSConnectionu_contextu_check_hostname(uselfureq((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu https_opensuHTTPSHandler.https_openN( u__name__u __module__u __qualname__uNoneu__init__u https_openuAbstractHTTPHandleru do_request_u https_request(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu HTTPSHandlers u HTTPSHandlercBsG|EeZdZddd„Zdd„Zdd„ZeZeZdS(uHTTPCookieProcessorcCs7ddl}|dkr*|jjƒ}n||_dS(Ni(uhttp.cookiejaruNoneu cookiejaru CookieJar(uselfu cookiejaruhttp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__s  uHTTPCookieProcessor.__init__cCs|jj|ƒ|S(N(u cookiejaruadd_cookie_header(uselfurequest((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_requestsu HTTPCookieProcessor.http_requestcCs|jj||ƒ|S(N(u cookiejaruextract_cookies(uselfurequesturesponse((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu http_responsesu!HTTPCookieProcessor.http_responseN( u__name__u __module__u __qualname__uNoneu__init__u http_requestu http_responseu https_requestuhttps_response(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuHTTPCookieProcessors   cBs |EeZdZdd„ZdS(uUnknownHandlercCs|j}td|ƒ‚dS(Nuunknown url type: %s(utypeuURLError(uselfurequtype((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu unknown_open"s uUnknownHandler.unknown_openN(u__name__u __module__u __qualname__u unknown_open(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuUnknownHandler!scCspi}xc|D][}|jddƒ\}}|ddkr^|ddkr^|dd…}n|||Parse list of key=value strings where keys are not duplicated.u=iiu"iÿÿÿÿiÿÿÿÿ(usplit(uluparsedueltukuv((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuparse_keqv_list&s  uparse_keqv_listcCsñg}d}d}}x±|D]©}|r?||7}d}qn|r‚|dkr]d}qn|dkrrd}n||7}qn|dkr§|j|ƒd}qn|dkr¼d}n||7}qW|rà|j|ƒndd„|DƒS( upParse lists as described by RFC 2068 Section 2. In particular, parse comma-separated lists where the elements of the list may include quoted-strings. A quoted-string could contain a comma. A non-quoted string could have quotes in the middle. Neither commas nor quotes count if they are escaped. Only double-quotes count, not single-quotes. uu\u"u,cSsg|]}|jƒ‘qS((ustrip(u.0upart((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu Ys u#parse_http_list..FT(uFalseuTrueuappend(usuresupartuescapeuquoteucur((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuparse_http_list0s4            uparse_http_listcBs>|EeZdZdd„ZdZdd„Zdd„ZdS(u FileHandlercCs…|j}|dd…dkrt|dd…dkrt|jrt|jdkrt|j|jƒk rtdƒ‚qn |j|ƒSdS(Niu//iu/u localhostu-file:// scheme is supported only on localhost(uselectoruhostu get_namesuURLErroruopen_local_file(uselfurequurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu file_open]s  5uFileHandler.file_openc Cs}tjdkrvy7ttjdƒdtjtjƒƒdƒt_Wqvtjk rrtjdƒft_YqvXntjS(Nu localhosti( u FileHandlerunamesuNoneutupleusocketugethostbyname_exu gethostnameugaierroru gethostbyname(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu get_nameshs$uFileHandler.get_namescCsaddl}ddl}|j}|j}t|ƒ}yçtj|ƒ}|j}|jj |j ddƒ} |j |ƒd} |j d| p‘d|| fƒ} |r¼t|ƒ\}} n| sâ| rt|ƒ|jƒkr|rùd||} n d|} tt|dƒ| | ƒSWn1tk rP}zt|ƒ‚WYdd}~XnXtdƒ‚dS( Niuusegmtu6Content-type: %s Content-length: %d Last-modified: %s u text/plainufile://urbufile not on local hostT(u email.utilsu mimetypesuhostuselectoru url2pathnameuosustatust_sizeuutilsu formatdateust_mtimeuTrueu guess_typeumessage_from_stringu splitportu_safe_gethostbynameu get_namesu addinfourluopenuOSErroruURLError(uselfurequemailu mimetypesuhostufilenameu localfileustatsusizeumodifiedumtypeuheadersuportuorigurluexp((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_local_filess0       uFileHandler.open_local_fileN(u__name__u __module__u __qualname__u file_openuNoneunamesu get_namesuopen_local_file(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu FileHandler[s  c Cs1ytj|ƒSWntjk r,dSYnXdS(N(usocketu gethostbynameugaierroruNone(uhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_safe_gethostbynamesu_safe_gethostbynamecBs,|EeZdZdd„Zdd„ZdS(u FTPHandlerc"Csúddl}ddl}|j}|s6tdƒ‚nt|ƒ\}}|dkr`|j}n t|ƒ}t|ƒ\}}|r™t |ƒ\}}nd}t |ƒ}|p´d}|pÀd}yt j |ƒ}Wn4t j k r }zt|ƒ‚WYdd}~XnXt|jƒ\} } | jdƒ} ttt | ƒƒ} | dd…| d} } | r…| d r…| dd…} ny|j||||| |jƒ} | rµdp¸d}xM| D]E}t|ƒ\}}|jƒdkrÂ|dkrÂ|jƒ}qÂqÂW| j| |ƒ\}}d}|j|jƒd}|rV|d |7}n|dk r|dkr|d|7}ntj|ƒ}t|||jƒSWnQ|jk rõ}z.td|ƒ}|jt j!ƒdƒ‚WYdd}~XnXdS(Niuftp error: no host givenuu/iuIuDutypeuauAuiuduContent-type: %s uContent-length: %d u ftp error: %riiÿÿÿÿiÿÿÿÿ(uauAuiuIuduD("uftplibu mimetypesuhostuURLErroru splitportuNoneuFTP_PORTuintu splituseru splitpasswduunquoteusocketu gethostbynameuerroru splitattruselectorusplitulistumapu connect_ftputimeoutu splitvalueuloweruupperuretrfileu guess_typeufull_urluemailumessage_from_stringu addinfourlu all_errorsuwith_tracebackusysuexc_info(uselfurequftplibu mimetypesuhostuportuuserupasswdumsgupathuattrsudirsufileufwutypeuattruvalueufpuretrlenuheadersumtypeuexpuexc((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuftp_open–s\         !  uFTPHandler.ftp_openc Cst||||||ddƒS(Nu persistentF(u ftpwrapperuFalse(uselfuuserupasswduhostuportudirsutimeout((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu connect_ftpËsuFTPHandler.connect_ftpN(u__name__u __module__u __qualname__uftp_openu connect_ftp(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu FTPHandler•s 5cBs\|EeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S(uCacheFTPHandlercCs1i|_i|_d|_d|_d|_dS(Nii<i(ucacheutimeoutusoonestudelayu max_conns(uself((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__Òs     uCacheFTPHandler.__init__cCs ||_dS(N(udelay(uselfut((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu setTimeoutÙsuCacheFTPHandler.setTimeoutcCs ||_dS(N(u max_conns(uselfum((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu setMaxConnsÜsuCacheFTPHandler.setMaxConnscCs›|||dj|ƒ|f}||jkrJtjƒ|j|j|YqXqW|jdd…=n|jro|jjƒndS(N(u_URLopener__tempfilesu_URLopener__unlinkuOSErroru tempcacheuclear(uselfufile((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyucleanupLs    uURLopener.cleanupcGs|jj|ƒdS(udAdd a header to be used by the HTTP interface only e.g. u.addheader('Accept', 'sound/basic')N(u addheadersuappend(uselfuargs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu addheaderZsuURLopener.addheadercCsâtt|ƒƒ}t|ddƒ}|jrn||jkrn|j|\}}t|dƒ}t|||ƒSt|ƒ\}}|sd}n||jkrÞ|j|}t|ƒ\}} t| ƒ\} } | |f}nd }d|} ||_ | j ddƒ} t || ƒsD|r1|j |||ƒS|j||ƒSny9|d krft|| ƒ|ƒSt|| ƒ||ƒSWn^tk r”‚YnJtjk rÝ} z'td| ƒjtjƒd ƒ‚WYd d } ~ XnXd S( u6Use URLopener().open(file) instead of open(file, 'r').usafeu%/:=&?~#+!$,;'@()*[]|urbufileuopen_u-u_u socket erroriN(uunwraputo_bytesuquoteu tempcacheuopenu addinfourlu splittypeuproxiesu splithostuNoneutypeureplaceuhasattruopen_unknown_proxyu open_unknownugetattru HTTPErrorusocketuerroruIOErroruwith_tracebackusysuexc_info(uselfufullurludataufilenameuheadersufpuurltypeuurluproxyu proxyhostuhostuselectorunameumsg((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen`s<      uURLopener.opencCs(t|ƒ\}}tdd|ƒ‚dS(u/Overridable interface to open unknown URL type.u url erroruunknown url typeN(u splittypeuIOError(uselfufullurludatautypeuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_unknown„suURLopener.open_unknowncCs,t|ƒ\}}tdd||ƒ‚dS(u/Overridable interface to open unknown URL type.u url erroruinvalid proxy for %sN(u splittypeuIOError(uselfuproxyufullurludatautypeuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_unknown_proxy‰suURLopener.open_unknown_proxyc'Csótt|ƒƒ}|jr5||jkr5|j|St|ƒ\}}|dkrÔ| sf|dkrÔyC|j|ƒ}|jƒ}|jƒtt |ƒdƒ|fSWqÔt k rÐ} zWYdd} ~ XqÔXn|j ||ƒ}zÇ|jƒ} |r t |dƒ} n³ddl } t|ƒ\} }t |p7dƒ\} }t |pOdƒ\}} t|pgdƒ\}} tjj|ƒd}| j|ƒ\}}|jj|ƒtj|dƒ} zÞ|| f}|jdk rî||j|||||ƒnx\|j|ƒ}|sZPn|t|ƒ7}| j|ƒ|d7}|rA||||ƒqAqAWd| jƒXWd|jƒX|dkrï||krïtd ||f|ƒ‚n|S(utretrieve(url) returns (filename, headers) for a local object or (tempfilename, headers) for a remote object.ufileiNuwbiuiiucontent-lengthuContent-Lengthu1retrieval incomplete: got only %i out of %i bytesi iÿÿÿÿ(uunwraputo_bytesu tempcacheu splittypeuNoneuopen_local_fileuinfoucloseu url2pathnameu splithostuIOErroruopenutempfileu splitqueryu splitattruosupathusplitextumkstempu_URLopener__tempfilesuappendufdopenuintureadulenuwriteuContentTooShortError(uselfuurlufilenameu reporthookudatautypeuurl1ufpuhdrsumsguheadersutfputempfileugarbageupathusuffixufduresultubsusizeureadublocknumublock((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretrievesl          uURLopener.retrievecCsd}d}t|tƒr]t|ƒ\}}|rTt|ƒ\}}t|ƒ}n|}nµ|\}}t|ƒ\}}t|ƒ\} } | }d}| jƒdkr´d}n^t| ƒ\}} |rát|ƒ\}}n|rýd| || f}nt|ƒr|}n|s*t ddƒ‚n|r]t|ƒ}t j |j ƒƒj dƒ} nd} |r–t|ƒ}t j |j ƒƒj dƒ} nd} ||ƒ} i}| rÅd| |dDefault error handler: close the connection and raise IOError.N(ucloseu HTTPErroruNone(uselfuurlufpuerrcodeuerrmsguheaders((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_defaultAs uURLopener.http_error_defaultcCs"tjj|d|jd|jƒS(Nukey_fileu cert_file(uhttpuclientuHTTPSConnectionukey_fileu cert_file(uselfuhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_https_connectionGs uURLopener._https_connectioncCs|j|j||ƒS(uUse HTTPS protocol.(u_open_generic_httpu_https_connection(uselfuurludata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_httpsLsuURLopener.open_httpscCs†t|tƒstdƒ‚n|dd…dkru|dd…dkru|dd…jƒdkrutd ƒ‚n |j|ƒSdS( u/Use local file or FTP depending on form of URL.uEfile error: proxy support for file protocol currently not implementedNiu//iu/i u localhost/u-file:// scheme is supported only on localhost(u isinstanceustruURLErroruloweru ValueErroruopen_local_file(uselfuurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_filePs HuURLopener.open_filecCsÝddl}ddl}t|ƒ\}}t|ƒ}ytj|ƒ}Wn:tk r…}zt|j|j ƒ‚WYdd}~XnX|j } |j j |j ddƒ} |j|ƒd} |jd| pÏd| | fƒ} |s'|} |dd…dkrd|} ntt|d ƒ| | ƒSt|ƒ\}}| rÍtj|ƒtƒftƒkrÍ|} |dd…dkr‹d|} n)|dd …d kr´td |ƒ‚ntt|d ƒ| | ƒStd ƒ‚dS(uUse local file.iNuusegmtu6Content-Type: %s Content-Length: %d Last-modified: %s u text/plainiu/ufile://urbiu./uAlocal file url may start with / or file:. Unknown url of type: %su#local file error: not on local hostT(u email.utilsu mimetypesu splithostu url2pathnameuosustatuOSErroruURLErrorustrerrorufilenameust_sizeuutilsu formatdateust_mtimeuTrueu guess_typeumessage_from_stringu addinfourluopenu splitportusocketu gethostbynameu localhostuthishostu ValueError(uselfuurluemailu mimetypesuhostufileu localnameustatsueusizeumodifiedumtypeuheadersuurlfileuport((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuopen_local_fileYs:   (  " uURLopener.open_local_filecCs‘t|tƒstdƒ‚nddl}t|ƒ\}}|sQtdƒ‚nt|ƒ\}}t|ƒ\}}|rt|ƒ\}}nd}t |ƒ}t |p®dƒ}t |pÀdƒ}t j |ƒ}|sóddl }|j }n t|ƒ}t|ƒ\}} t |ƒ}|jdƒ} | dd…| d} } | rk| d rk| dd…} n| r‰| d r‰d| dt j |j dƒƒjdƒ}n t|ƒ}|jdt|ƒƒ|jd ƒ|j|ƒdj|ƒ}tj|ƒ}tj|ƒ}t|||ƒS(uUse "data" URL.uEdata error: proxy support for data protocol currently not implementedu,iu data erroru bad data URLutext/plain;charset=US-ASCIIu;iu=NuuDate: %su%a, %d %b %Y %H:%M:%S GMTuContent-type: %subase64uasciiulatin-1uContent-Length: %du (u isinstanceustruURLErrorusplitu ValueErroruIOErrorurfinduappendutimeustrftimeugmtimeubase64u decodebytesuencodeudecodeuunquoteulenujoinuemailumessage_from_stringuiouStringIOu addinfourl( uselfuurludatautypeusemiuencodingumsguheadersuf((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu open_data³s6  " $   uURLopener.open_dataN(u__name__u __module__u __qualname__u__doc__uNoneu_URLopener__tempfilesu __version__uversionu__init__u__del__ucloseucleanupu addheaderuopenu open_unknownuopen_unknown_proxyuretrieveu_open_generic_httpu open_httpu http_erroruhttp_error_defaultu _have_sslu_https_connectionu open_httpsu open_fileuopen_local_fileuopen_ftpu open_data(u __locals__((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu URLopeners.     $B \   :cBsõ|EeZdZdZdd„Zdd„Zd!dd„Zdd „Zd!d d „Z d!d d „Z d!dd„Z d!d"dd„Z d!d"dd„Zd!dd„Zd!dd„Zd!dd„Zd!dd„Zddd„Zdd „Zd!S(#uFancyURLopeneru?Derived class with handlers for errors we can handle (perhaps).cOs2tj|||Ži|_d|_d|_dS(Nii (u URLopeneru__init__u auth_cacheutriesumaxtries(uselfuargsukwargs((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu__init__às  uFancyURLopener.__init__cCst||d||ƒS(u3Default error handling -- don't raise an exception.uhttp:(u addinfourl(uselfuurlufpuerrcodeuerrmsguheaders((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_defaultæsu!FancyURLopener.http_error_defaultc Cs˜|jd7_|jrm|j|jkrmt|dƒrE|j}n |j}d|_|||dd|ƒS|j||||||ƒ}d|_|S(u%Error 302 -- relocated (temporarily).iuhttp_error_500iiôu)Internal Server Error: Redirect Recursion(utriesumaxtriesuhasattruhttp_error_500uhttp_error_defaulturedirect_internal( uselfuurlufpuerrcodeuerrmsguheadersudataumethuresult((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_302ês       uFancyURLopener.http_error_302c Cs¥d|kr|d}nd|kr2|d}ndS|jƒt|jd||ƒ}t|ƒ}|jd kr˜t|||d|||ƒ‚n|j|ƒS( Nulocationuuriu:uhttpuhttpsuftpuu( Redirection to url '%s' is not allowed.(uhttpuhttpsuftpu(ucloseuurljoinutypeuurlparseuschemeu HTTPErroruopen( uselfuurlufpuerrcodeuerrmsguheadersudataunewurluurlparts((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuredirect_internalús       u FancyURLopener.redirect_internalcCs|j||||||ƒS(u*Error 301 -- also relocated (permanently).(uhttp_error_302(uselfuurlufpuerrcodeuerrmsguheadersudata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_301suFancyURLopener.http_error_301cCs|j||||||ƒS(u;Error 303 -- also relocated (essentially identical to 302).(uhttp_error_302(uselfuurlufpuerrcodeuerrmsguheadersudata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_303suFancyURLopener.http_error_303cCsE|dkr(|j||||||ƒS|j|||||ƒSdS(u1Error 307 -- relocated, but turn POST into error.N(uNoneuhttp_error_302uhttp_error_default(uselfuurlufpuerrcodeuerrmsguheadersudata((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_307s uFancyURLopener.http_error_307c Cs$d|kr+tj||||||ƒn|d}tjd|ƒ} | sltj||||||ƒn| jƒ\} } | jƒdkr¯tj||||||ƒn|sÔtj||||||ƒnd|jd} |dkrt|| ƒ|| ƒSt|| ƒ|| |ƒSdS(u_Error 401 -- authentication required. This function supports Basic authentication only.uwww-authenticateu![ ]*([^ ]+)[ ]+realm="([^"]*)"ubasicuretry_u _basic_authN( u URLopeneruhttp_error_defaultureumatchugroupsulowerutypeuNoneugetattr( uselfuurlufpuerrcodeuerrmsguheadersudatauretryustuffumatchuschemeurealmuname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_401%s&    uFancyURLopener.http_error_401c Cs$d|kr+tj||||||ƒn|d}tjd|ƒ} | sltj||||||ƒn| jƒ\} } | jƒdkr¯tj||||||ƒn|sÔtj||||||ƒnd|jd} |dkrt|| ƒ|| ƒSt|| ƒ|| |ƒSdS(ueError 407 -- proxy authentication required. This function supports Basic authentication only.uproxy-authenticateu![ ]*([^ ]+)[ ]+realm="([^"]*)"ubasicu retry_proxy_u _basic_authN( u URLopeneruhttp_error_defaultureumatchugroupsulowerutypeuNoneugetattr( uselfuurlufpuerrcodeuerrmsguheadersudatauretryustuffumatchuschemeurealmuname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuhttp_error_407>s&    uFancyURLopener.http_error_407cCs t|ƒ\}}d||}|jd}t|ƒ\}} t| ƒ\} } | jdƒd} | | d…} |j| || ƒ\} } | p˜| sŸdSdt| ddƒt| ddƒ| f} d| | |jd<|dkrø|j|ƒS|j||ƒSdS(Nuhttp://uhttpu@iu%s:%s@%susafeu(u splithostuproxiesu splittypeufinduget_user_passwduNoneuquoteuopen(uselfuurlurealmudatauhostuselectorunewurluproxyuurltypeu proxyhostu proxyselectoruiuuserupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_proxy_http_basic_authWs     u*FancyURLopener.retry_proxy_http_basic_authcCs t|ƒ\}}d||}|jd}t|ƒ\}} t| ƒ\} } | jdƒd} | | d…} |j| || ƒ\} } | p˜| sŸdSdt| ddƒt| ddƒ| f} d| | |jd<|dkrø|j|ƒS|j||ƒSdS(Nuhttps://uhttpsu@iu%s:%s@%susafeu(u splithostuproxiesu splittypeufinduget_user_passwduNoneuquoteuopen(uselfuurlurealmudatauhostuselectorunewurluproxyuurltypeu proxyhostu proxyselectoruiuuserupasswd((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_proxy_https_basic_authis     u+FancyURLopener.retry_proxy_https_basic_authc CsÆt|ƒ\}}|jdƒd}||d…}|j|||ƒ\}}|pY|s`dSdt|ddƒt|ddƒ|f}d||} |dkr²|j| ƒS|j| |ƒSdS(Nu@iu%s:%s@%susafeuuhttp://(u splithostufinduget_user_passwduNoneuquoteuopen( uselfuurlurealmudatauhostuselectoruiuuserupasswdunewurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_http_basic_auth{s   u$FancyURLopener.retry_http_basic_authc CsÆt|ƒ\}}|jdƒd}||d…}|j|||ƒ\}}|pY|s`dSdt|ddƒt|ddƒ|f}d||} |dkr²|j| ƒS|j| |ƒSdS(Nu@iu%s:%s@%susafeuuhttps://(u splithostufinduget_user_passwduNoneuquoteuopen( uselfuurlurealmudatauhostuselectoruiuuserupasswdunewurl((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuretry_https_basic_auth‰s   u%FancyURLopener.retry_https_basic_authicCsˆ|d|jƒ}||jkrD|r6|j|=qD|j|Sn|j||ƒ\}}|sh|r~||f|j| proxy server URL mappings. Scan the environment for variables named _proxy; this seems to be the standard convention. If you need a different way, you can pass a proxies dictionary to the [Fancy]URLopener constructor. iNu_proxyuREQUEST_METHODuhttpiúÿÿÿiúÿÿÿ(uosuenvironuitemsulowerupopuNone(uproxiesunameuvalue((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_environment3 s  ugetproxies_environmentcCs¥tjjddƒp'tjjddƒ}|dkr:dSt|ƒ\}}dd„|jdƒDƒ}x6|D].}|ro|j|ƒs™|j|ƒrodSqoWd S( uÏTest if proxies should not be used for a particular host. Checks the environment for a variable named no_proxy, which should be a list of DNS suffixes separated by commas, or '*' for all hosts. uno_proxyuuNO_PROXYu*icSsg|]}|jƒ‘qS((ustrip(u.0uproxy((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu W s u,proxy_bypass_environment..u,i(uosuenvironugetu splitportusplituendswith(uhostuno_proxyuhostonlyuportu no_proxy_listuname((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuproxy_bypass_environmentJ s*  $uproxy_bypass_environmentc Cs†ddlm}t|ƒ\}}dd„}d|krK|drKdSnd }x.|jdfƒD]}|svqdntjd|ƒ}|d k rk|d krÝytj|ƒ}||ƒ}WqÝtj k rÙwdYqÝXn||j d ƒƒ} |j d ƒ} | d kr0d |j d ƒj dƒd } nt | d d …ƒ} d | } || ?| | ?kr~dSqd|||ƒrddSqdWdS(uj Return True iff this host shouldn't be accessed using a proxy This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. proxy_settings come from _scproxy._get_proxy_settings or get mocked ie: { 'exclude_simple': bool, 'exceptions': ['foo.bar', '*.bar.com', '127.0.0.1', '10.1', '10.0/16'] } i(ufnmatchcSs…|jdƒ}ttt|ƒƒ}t|ƒdkrY|ddddgdd…}n|dd>|dd>B|dd>B|d BS( Nu.iiiiiiii(usplitulistumapuintulen(uipAddruparts((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuip2numq s #u,_proxy_bypass_macosx_sysconf..ip2numu.uexclude_simpleu exceptionsu(\d+(?:\.\d+)*)(/\d+)?iiiNi TF(ufnmatchu splitportuTrueuNoneugetureumatchusocketu gethostbynameuerrorugroupucountuintuFalse( uhostuproxy_settingsufnmatchuhostonlyuportuip2numuhostIPuvalueumubaseumask((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu_proxy_bypass_macosx_sysconfa s:        # u_proxy_bypass_macosx_sysconfudarwin(u_get_proxy_settingsu _get_proxiescCstƒ}t||ƒS(N(u_get_proxy_settingsu_proxy_bypass_macosx_sysconf(uhostuproxy_settings((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuproxy_bypass_macosx_sysconf  s uproxy_bypass_macosx_sysconfcCstƒS(u±Return a dictionary of scheme -> proxy server URL mappings. This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. (u _get_proxies(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_macosx_sysconf¤ sugetproxies_macosx_sysconfcCs!tƒrt|ƒSt|ƒSdS(N(ugetproxies_environmentuproxy_bypass_environmentuproxy_bypass_macosx_sysconf(uhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu proxy_bypass® s  u proxy_bypasscCstƒptƒS(N(ugetproxies_environmentugetproxies_macosx_sysconf(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu getproxies´ scCsli}yddl}Wntk r.|SYnXy|j|jdƒ}|j|dƒd}|r?t|j|dƒdƒ}d|krïx®|jdƒD]M}|jddƒ\}}tjd |ƒsÞd ||f}n||| proxy server URL mappings. Win32 uses the registry to store proxies. iNu;Software\Microsoft\Windows\CurrentVersion\Internet Settingsu ProxyEnableu ProxyServeru=u;iu ^([^/:]+)://u%s://%siuhttp:uhttpu http://%su https://%suhttpsuftp://%suftp( uwinregu ImportErroruOpenKeyuHKEY_CURRENT_USERu QueryValueExustrusplitureumatchuCloseu WindowsErroru ValueErroru TypeError(uproxiesuwinreguinternetSettingsu proxyEnableu proxyServerupuprotocoluaddress((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyugetproxies_registry¹ s8         ugetproxies_registrycCstƒptƒS(u¥Return a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. (ugetproxies_environmentugetproxies_registry(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu getproxiesæ sc 'Csîyddl}Wntk r(dSYnXyK|j|jdƒ}|j|dƒd}t|j|dƒdƒ}Wntk rŒdSYnX| s›| rŸdSt|ƒ\}}|g}y/tj |ƒ}||krè|j |ƒnWntj k rYnXy/tj |ƒ}||kr/|j |ƒnWntj k rGYnX|j dƒ}x|D]ˆ} | dkrƒd|krƒdSn| jdd ƒ} | jd d ƒ} | jd dƒ} x*|D]"} tj| | tjƒrÀdSqÀWq^WdS( Niu;Software\Microsoft\Windows\CurrentVersion\Internet Settingsu ProxyEnableu ProxyOverrideu;uu.iu\.u*u.*u?(uwinregu ImportErroruOpenKeyuHKEY_CURRENT_USERu QueryValueExustru WindowsErroru splitportusocketu gethostbynameuappenduerrorugetfqdnusplitureplaceureumatchuI( uhostuwinreguinternetSettingsu proxyEnableu proxyOverrideurawHostuportuaddrufqdnutestuval((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuproxy_bypass_registryï sR                 uproxy_bypass_registrycCs!tƒrt|ƒSt|ƒSdS(u¥Return a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. N(ugetproxies_environmentuproxy_bypass_environmentuproxy_bypass_registry(uhost((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyu proxy_bypass! s  (~u__doc__ubase64ubisectuemailuhashlibu http.clientuhttpuiouosu posixpathureusocketusysutimeu collectionsutempfileu contextlibuwarningsu urllib.erroruURLErroru HTTPErroruContentTooShortErroru urllib.parseuurlparseuurlsplituurljoinuunwrapuquoteuunquoteu splittypeu splithostu splitportu splituseru splitpasswdu splitattru splitqueryu splitvalueusplittaguto_bytesu urlunparseuurllib.responseu addinfourlu addclosehookusslu ImportErroruFalseu _have_ssluTrueu__all__uversionu __version__uNoneu_openeru_GLOBAL_DEFAULT_TIMEOUTuurlopenuinstall_openeru_url_tempfilesu urlretrieveu urlcleanupucompileuASCIIu _cut_port_reu request_hostuRequestuOpenerDirectoru build_openeru BaseHandleruHTTPErrorProcessoruHTTPDefaultErrorHandleruHTTPRedirectHandleru _parse_proxyu ProxyHandleruHTTPPasswordMgruHTTPPasswordMgrWithDefaultRealmuAbstractBasicAuthHandleruHTTPBasicAuthHandleruProxyBasicAuthHandleruurandomu _randombytesuAbstractDigestAuthHandleruHTTPDigestAuthHandleruProxyDigestAuthHandleruAbstractHTTPHandleru HTTPHandleruhasattruclientu HTTPSHandleruappenduHTTPCookieProcessoruUnknownHandleruparse_keqv_listuparse_http_listu FileHandleru_safe_gethostbynameu FTPHandleruCacheFTPHandleru MAXFTPCACHEunameu nturl2pathu url2pathnameu pathname2urluftpcacheu URLopeneruFancyURLopeneru _localhostu localhostu _thishostuthishostu _ftperrorsu ftperrorsu _noheadersu noheadersu ftpwrapperugetproxies_environmentuproxy_bypass_environmentu_proxy_bypass_macosx_sysconfuplatformu_scproxyu_get_proxy_settingsu _get_proxiesuproxy_bypass_macosx_sysconfugetproxies_macosx_sysconfu proxy_bypassu getproxiesugetproxies_registryuproxy_bypass_registry(((u3/opt/alt/python33/lib64/python3.3/urllib/request.pyuDsÚ                p         $ ?  yŽ &h H*@ E   n  +4 :8  ÿ¿Ô    [   <   - 2