]@sHddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddddd d d d d dddddddgZ dZ dZ dZdZdZdZejejjddejjjDZdZdZdZejd jZejd!jZejd"Z d#d$d%hZ!d&d'd(Z"Gd)d*d*ej#j$Z%e%d+d,Z&Gd-ddej'Z(Gd.ddZ)yddl*Z*Wne+k rYn$XGd/d0d0e)Z,e j-d0Gd1dde.Z/Gd2dde/Z0Gd3d d e/Z1Gd4dde/Z2Gd5dde/Z3Gd6d d e/Z4Gd7d d e/Z5Gd8d d e/Z6Gd9d d e6Z7Gd:dde6Z8Gd;dde6Z9Gd<dde/Z:Gd=dde/Z;Gd>dde<e:Z=e/Z>dS)?N)urlsplit HTTPResponseHTTPConnection HTTPException NotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReady BadStatusLine LineTooLongRemoteDisconnectederror responsesPiZUNKNOWNZIdlezRequest-startedz Request-sentcCsi|]}|j|qS)phrase).0vrr+/opt/alt/python35/lib64/python3.5/client.py ks riids[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]ZPATCHZPOSTPUTdatacCsy|jdSWnotk r}zOt|j|j|j|jd|j||j|j|fdWYdd}~XnXdS)Nzlatin-1z`%s (%.20r) is not valid Latin-1. Use %s.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)rnameerrrrr_encodesr(c@seZdZddZdS) HTTPMessagecCs|jd}t|}g}d}xh|jD]Z}|d|j|kr`d}n|ddjs|d}|r5|j|q5W|S)N:r)lowerlenkeysisspaceappend)selfr&nZlstZhitlinerrrgetallmatchingheaderss   z!HTTPMessage.getallmatchingheadersN)__name__ __module__ __qualname__r4rrrrr)s r)cCsg}xq|jtd}t|tkr:td|j|t|tkritdt|d kr Pq Wdj|jd}t j j d|j |S) Nr+z header linezgot more than %d headers  z iso-8859-1_class)r8r9r:) readline_MAXLINEr-rr0 _MAXHEADERSrjoindecodeemailparserZParserZparsestr)fpr;headersr3Zhstringrrr parse_headerss    rEcseZdZdddddZddZddZd d Zd d Zfd dZfddZ ddZ ddZ dddZ ddZ ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd@d(d)ZdAd*d+ZdBfd,d-Zd.d/Zd0d1Zd2d3Zdd4d5Zd6d7Zd8d9Zd:d;Zd<d=Zd>d?Z S)CrrNcCsw|jd|_||_||_d|_|_t|_t|_t|_ t|_ t|_ t|_ t|_ dS)Nrb)makefilerC debuglevel_methodrDmsg_UNKNOWNversionstatusreasonchunked chunk_leftlength will_close)r1sockrHmethodurlrrr__init__s        zHTTPResponse.__init__cCsit|jjtdd}t|tkr=td|jdkr_tdt||sqt dy|j dd\}}}WnOt k ry"|j dd\}}d}Wnt k rd}YnXYnX|j d s|j t|y4t|}|d ks.|d kr:t|Wnt k r[t|YnX|||fS) Nr+z iso-8859-1z status linerzreply:z-Remote end closed connection without responsezHTTP/ri)strrCr<r=r-rrHprintreprrsplit ValueError startswith _close_connrint)r1r3rLrMrNrrr _read_status s2         zHTTPResponse._read_statusc Cs|jdk rdSx|j\}}}|tkr8Pxg|jjtd}t|tkrotd|j}|sP|j dkr;t d|q;WqW||_ |_ |j|_ |dkrd|_n'|jdrd |_n t|t|j|_|_|j dkrSx$|jD]}t d|d d q6W|jjd }|r|jd krd|_d|_n d|_|j|_d|_|jjd}|jjd }|r3|j r3yt||_Wntk rd|_Yq<X|jdkr<d|_n d|_|tks|tksd|kokdkns|jdkrd|_|j r|j r|jdkrd|_dS)Nr+z header linerzheader:HTTP/1.0HTTP/0.9 zHTTP/1. r$ ztransfer-encodingrOTFzcontent-lengthrHEAD)rbrc)rDraZCONTINUErCr<r=r-rstriprHrZcoderMrNrLr^rrErJgetr,rOrP _check_closerRrQr`r]Z NO_CONTENTZ NOT_MODIFIEDrI)r1rLrMrNskiphdrZtr_encrQrrrbegin,sf                 zHTTPResponse.begincCs|jjd}|jdkrS|jjd}|rOd|jkrOdSdS|jjdridS|rd|jkrdS|jjd}|rd|jkrdSdS)N connectionrecloseTFz keep-alivezproxy-connection)rDrkrLr,)r1connZpconnrrrrl|szHTTPResponse._check_closecCs |j}d|_|jdS)N)rCrq)r1rCrrrr_s  zHTTPResponse._close_connc s,ztjWd|jr'|jXdS)N)superrqrCr_)r1) __class__rrrqs zHTTPResponse.closecs'tj|jr#|jjdS)N)rsflushrC)r1)rtrrrus  zHTTPResponse.flushcCsdS)NTr)r1rrrreadableszHTTPResponse.readablecCs |jdkS)N)rC)r1rrrisclosedszHTTPResponse.isclosedc Cs|jdkrdS|jdkr0|jdS|dk rqt|}|j|}t|d|jS|jr|jS|j dkr|jj }nAy|j |j }Wnt k r|jYnXd|_ |j|SdS)Nr:rhr) rCrIr_ bytearrayreadinto memoryviewtobytesrO_readall_chunkedrQread _safe_readr )r1amtbr2srrrr}s*         zHTTPResponse.readcCs|jdkrdS|jdkr0|jdS|jrF|j|S|jdk rt||jkrt|d|j}|jj|}| r|r|jn1|jdk r|j|8_|js|j|S)Nrrh) rCrIr_rO_readinto_chunkedrQr-rzry)r1rr2rrrrys$       zHTTPResponse.readintoc Cs|jjtd}t|tkr4td|jd}|dkr_|d|}yt|dSWntk r|jYnXdS)Nr+z chunk size;r) rCr<r=r-rfindr`r]r_)r1r3irrr_read_next_chunk_sizes    z"HTTPResponse._read_next_chunk_sizecCsSxL|jjtd}t|tkr7td|s>P|dkrPqWdS)Nr+z trailer line  r:)rrr:)rCr<r=r-r)r1r3rrr_read_and_discard_trailer s  z&HTTPResponse._read_and_discard_trailerc Cs|j}|s|dk r(|jdy|j}Wntk rXtdYnX|dkr|j|jd}||_|S)NrWr:r)rPr~rr]r rr_)r1rPrrr_get_chunk_lefts        zHTTPResponse._get_chunk_leftc Csg}yPx<|j}|dkr%P|j|j|d|_q Wdj|SWn'tk rtdj|YnXdS)Nrr:)rr0r~rPr?r )r1valuerPrrrr|3s    zHTTPResponse._readall_chunkedc Csd}t|}yx|j}|dkr4|St||krj|j|}|||_||S|d|}|j|}||d}||7}d|_qWWn.tk rtt|d|YnXdS)Nr)rzrr-_safe_readintorPr bytes)r1r total_bytesmvbrPr2temp_mvbrrrrAs$      zHTTPResponse._readinto_chunkedcCs|g}xf|dkrn|jjt|t}|sNtdj|||j||t|8}q Wdj|S)Nrr:)rCr}min MAXAMOUNTr r?r0r-)r1rrchunkrrrr~Ys zHTTPResponse._safe_readcCsd}t|}x|t|krtt|kr^|dt}|jj|}n|jj|}|stt|d|t|||d}||7}qW|S)Nr)rzr-rrCryr r)r1rrrrr2rrrrps %zHTTPResponse._safe_readintor+c Cs|jdks|jdkr"dS|jr8|j|S|jdk rk|dksb||jkrk|j}y|jj|}Wn3tk r|dkr|jjd}YnX| r|r|jn$|jdk r|jt|8_|S)Nrhr:rrii@) rCrIrO_read1_chunkedrQread1r]r_r-)r1r2resultrrrrs"  *     zHTTPResponse.read1cCsH|jdks|jdkr"dS|jr8|j|S|jj|S)Nrhr:)rCrIrO _peek_chunkedpeek)r1r2rrrrs   zHTTPResponse.peekcs|jdks|jdkr"dS|jr;tj|S|jdk rn|dkse||jkrn|j}|jj|}| r|r|jn$|jdk r|jt|8_|S)Nrhr:r)rCrIrOrsr<rQr_r-)r1limitr)rtrrr<s *   zHTTPResponse.readlinecCs|j}|dks$|dkr(dSd|ko?|knsJ|}|jj|}|jt|8_|std|S)Nrr:)rrCrrPr-r )r1r2rPr}rrrrs  zHTTPResponse._read1_chunkedc CsSy|j}Wntk r(dSYnX|dkr9dS|jj|d|S)Nr:)rr rCr)r1r2rPrrrrs   zHTTPResponse._peek_chunkedcCs |jjS)N)rCfileno)r1rrrrszHTTPResponse.filenocCsd|jdkrt|jj|p-|}t|tsOt|d rS|Sdj|SdS)N__iter__z, )rDrZget_all isinstancerYhasattrr?)r1r&defaultrDrrr getheaders  zHTTPResponse.getheadercCs+|jdkrtt|jjS)N)rDrlistitems)r1rrr getheaderss zHTTPResponse.getheaderscCs|S)Nr)r1rrrrszHTTPResponse.__iter__cCs|jS)N)rD)r1rrrinfoszHTTPResponse.infocCs|jS)N)rU)r1rrrgeturlszHTTPResponse.geturlcCs|jS)N)rM)r1rrrgetcodeszHTTPResponse.getcoderr)!r5r6r7rVrarorlr_rqrurvrwr}ryrrrr|rr~rrrr<rrrrrrrrrrr)rtrrs<  ! P                    c@s<eZdZdZdZeZeZdZ dZ de j dddZ dddd Zd d Zd d ZddZddZddZddZddZdddZddddZddZdd Zd!d"Zdd#d$Zdid%d&Zd'd(Zd)d*Zd+d,ZdS)-rrezHTTP/1.1r+rNcCs||_||_d|_g|_d|_t|_d|_d|_d|_ i|_ |j ||\|_ |_ tj|_dS)N)timeoutsource_addressrS_buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__staterI _tunnel_host _tunnel_port_tunnel_headers _get_hostporthostportsocketcreate_connection_create_connection)r1rrrrrrrrVs          zHTTPConnection.__init__cCsV|jrtd|j||\|_|_|rE||_n |jjdS)Nz.Can't set up tunnel for established connection)rS RuntimeErrorrrrrclear)r1rrrDrrr set_tunnel s    zHTTPConnection.set_tunnelc Cs |dkr|jd}|jd}||kryt||dd}WnVtk r||dddkr|j}ntd||ddYnX|d|}n |j}|r|ddkr|ddkr|dd }||fS) Nr*]r+rXznonnumeric port: '%s'r[rr)rfindr`r] default_portr )r1rrrjrrrr"s    # &zHTTPConnection._get_hostportcCs ||_dS)N)rH)r1levelrrrset_debuglevel6szHTTPConnection.set_debuglevelc Cshd|j|jf}|jd}|j|xI|jjD]8\}}d||f}|jd}|j|qBW|jd|j|jd|j}|j \}} } | t j j kr|j td| | jfxn|jjtd} t| tkr*td | s1P| dkr>P|jd krtd | jqWdS)NzCONNECT %s:%d HTTP/1.0 asciiz%s: %s zlatin-1 rTzTunnel connection failed: %d %sr+z header line r:rzheader:)rrr:)rrrsendrrresponse_classrSrIrahttp HTTPStatusZOKrqOSErrorrirCr<r=r-rrHrZr@) r1Z connect_strZ connect_bytesheaderrZ header_strZ header_bytesresponserLrjmessager3rrr_tunnel9s2        zHTTPConnection._tunnelcCs]|j|j|jf|j|j|_|jjtjtj d|j rY|j dS)Nr+) rrrrrrS setsockoptr IPPROTO_TCP TCP_NODELAYrr)r1rrrconnectXs $ zHTTPConnection.connectc CsYt|_z&|j}|r.d|_|jWd|j}|rTd|_|jXdS)N)rrrSrqr)r1rSrrrrrqas     zHTTPConnection.closecCs|jdkr.|jr%|jn t|jdkrPtdt|d}t|dr|jdkr~tdd}y |j}Wnt k rYn,Xd|krd}|jdkrtd x?|j |}|sP|r|j d }|jj |qWdSy|jj |Wn^t k rt|tjrqx7|D]}|jj |qTWnt d t|YnXdS) Nrzsend:i r}zsendIng a read()ableFrTzencoding file using iso-8859-1z iso-8859-1z9data should be a bytes-like object or an iterable, got %r)rS auto_openrrrHrZr[rmodeAttributeErrorr}rsendall TypeErrorr collectionsIterabletype)r1r blocksizerrZ datablockdrrrrosF          zHTTPConnection.sendcCs|jj|dS)N)rr0)r1rrrr_outputszHTTPConnection._outputcCs\|jjddj|j}|jdd=|j||dk rX|j|dS)Nr:s )r:r:)rextendr?r)r1 message_bodyrJrrr _send_outputs   zHTTPConnection._send_outputFc Cs |jr!|jjr!d|_|jtkr<t|_nt|j||_|p]d}|j|d|||jf}|j |j ||j dkr|sd}|j drt |\}}}}}|r.y|jd}Wn!tk r|jd}YnX|jd|n|jrL|j} |j} n|j} |j} y| jd} Wn!tk r| jd} YnX| jd d krd | d } | |jkr|jd| n)| jd} |jdd | | f|s|jddndS)N/z%s %s %srerXrrZidnaZHostr*r[]z%s:%szAccept-Encodingidentity)rrwrr_CS_REQ_STARTEDr rI_validate_path _http_vsn_strr_encode_request _http_vsnr^rrr putheaderrrrrrrr@) r1rTrU skip_hostskip_accept_encodingrequestZnetlocnilZ netloc_encrrZhost_encrrr putrequestsN               zHTTPConnection.putrequestcCs |jdS)Nr)r)r1rrrrr1szHTTPConnection._encode_requestcCsCtj|}|r?djd|jt}t|dS)NzJURL can't contain control characters. {url!r} (found at least {matched!r})Zmatched)!_contains_disallowed_url_pchar_researchformatgrouplocalsr )r1rUmatchrJrrrr5s  zHTTPConnection._validate_pathcGs |jtkrtt|dr6|jd}t|sUtd|ft|}xt|D]\}}t|dr|jd||s z0HTTPConnection._send_request..rr+rzaccept-encodingrzcontent-lengthr) dictfromkeysrrrrrrYr(r) r1rTrUrrDZ header_namesZskipsrnrrrrrs     zHTTPConnection._send_requestcCs|jr!|jjr!d|_|jtks9|jrHt|j|jdkr{|j|j|jd|j}n|j|jd|j}y`y|j Wnt k r|j YnXt |_|j r|j n ||_|SWn|j YnXdS)NrrT)rrwrrrrHrrSrIroConnectionErrorrqrrR)r1rrrr getresponses,        zHTTPConnection.getresponse) r5r6r7rrrr HTTP_PORTrrrHr_GLOBAL_DEFAULT_TIMEOUTrVrrrrrrqrrrrrrrrrrrrrrrrrs6       0 |    c sXeZdZeZdddejdddddfddZfddZS)HTTPSConnectionNcontextcheck_hostnamec stt|j||||||_||_|dkrItj}|jtjk} |dkrp|j }|r| rt d|s|r|j ||||_ ||_ dS)NzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rsr rVkey_file cert_filesslZ_create_default_https_contextZ verify_modeZ CERT_NONEr r]Zload_cert_chain_context_check_hostname) r1rrrrrrr r Z will_verify)rtrrrVs          zHTTPSConnection.__init__c stj|jr"|j}n |j}|jj|jd||_|jj r|jryt j |jj |Wn5t k r|jj tj|jjYnXdS)Nserver_hostname)rsrrrrZ wrap_socketrSr rrZmatch_hostnameZ getpeercert Exceptionshutdownr SHUT_RDWRrq)r1r)rtrrrs       zHTTPSConnection.connect) r5r6r7 HTTPS_PORTrrr rVrrr)rtrr s   r c@seZdZdS)rN)r5r6r7rrrrrs c@seZdZdS)rN)r5r6r7rrrrrs c@seZdZdS)r N)r5r6r7rrrrr s c@seZdZddZdS)rcCs|f|_||_dS)N)argsrL)r1rLrrrrVs zUnknownProtocol.__init__N)r5r6r7rVrrrrrs c@seZdZdS)rN)r5r6r7rrrrr"s c@seZdZdS)r N)r5r6r7rrrrr %s c@s7eZdZdddZddZddZdS)r NcCs"|f|_||_||_dS)N)rpartialexpected)r1rrrrrrV)s  zIncompleteRead.__init__cCsE|jdk rd|j}nd}d|jjt|j|fS)Nz, %i more expectedrXz%s(%i bytes read%s))rrtr5r-r)r1errr__repr__-s  zIncompleteRead.__repr__cCs t|S)N)r[)r1rrr__str__4szIncompleteRead.__str__)r5r6r7rVrrrrrrr (s  c@seZdZdS)r N)r5r6r7rrrrr 7s c@seZdZdS)r N)r5r6r7rrrrr :s c@seZdZdS)rN)r5r6r7rrrrr=s c@seZdZdS)rN)r5r6r7rrrrr@s c@seZdZddZdS)rcCs+|st|}|f|_||_dS)N)r[rr3)r1r3rrrrVDs  zBadStatusLine.__init__N)r5r6r7rVrrrrrCs c@seZdZddZdS)rcCstj|dt|fdS)Nz&got more than %d bytes when reading %s)rrVr=)r1Z line_typerrrrVKs zLineTooLong.__init__N)r5r6r7rVrrrrrJs c@seZdZddZdS)rcOs'tj|dtj|||dS)NrX)rrVConnectionResetError)r1poskwrrrrVPszRemoteDisconnected.__init__N)r5r6r7rVrrrrrOs )?Z email.parserrAZ email.messageriorrerrZ urllib.parser__all__r rrKrrrglobalsupdater __members__rrrr=r>compile fullmatchrrrrrr(rZMessager)rEBufferedIOBaserrr ImportErrorr r0rrrr rrr r r r rrrrrrrrrrrGsv               0