3 öLÖj*Üã@snddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddddd d d d d dddddddgZ dZ dZ dZdZdZdZeƒjejjƒdd„ejjjƒDƒZdZdZdZejd ƒjZejd!ƒjZejd"ƒZ ejd#ƒZ!d$d%d&hZ"dBd(d)„Z#Gd*d+„d+ej$j%ƒZ&d,d-„Z'e&fd.d/„Z(Gd0d„dej)ƒZ*Gd1d„dƒZ+y ddl,Z,Wne-k �rhYnXGd2d3„d3e+ƒZ.e j/d3ƒGd4d„de0ƒZ1Gd5d„de1ƒZ2Gd6d „d e1ƒZ3Gd7d„de1ƒZ4Gd8d„de1ƒZ5Gd9d „d e1ƒZ6Gd:d „d e1ƒZ7Gd;d „d e1ƒZ8Gdd„de8ƒZ;Gd?d„de1ƒZe<ƒZ?e1Z@dS)CéN)ÚurlsplitÚ HTTPResponseÚHTTPConnectionÚ HTTPExceptionÚ NotConnectedÚUnknownProtocolÚUnknownTransferEncodingÚUnimplementedFileModeÚIncompleteReadÚ InvalidURLÚImproperConnectionStateÚCannotSendRequestÚCannotSendHeaderÚResponseNotReadyÚ BadStatusLineÚ LineTooLongÚRemoteDisconnectedÚerrorÚ responseséPi»ZUNKNOWNZIdlezRequest-startedz Request-sentcCsi|] }|j|“qS©)Úphrase)Ú.0Úvrrú#/usr/lib64/python3.6/http/client.pyú ksriiéds[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]z[-]ZPATCHZPOSTZPUTÚdatacCsfy |jdƒStk r`}z:t|j|j|j|jd|jƒ||j|j…|fƒd‚WYdd}~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.)ÚencodeÚUnicodeEncodeErrorÚencodingÚobjectÚstartÚendÚtitle)rÚnameÚerrrrrÚ_encode£s r'c@seZdZdd„ZdS)Ú HTTPMessagecCsn|jƒd}t|ƒ}g}d}xL|jƒD]@}|d|…jƒ|krDd}n|dd…jƒsXd}|r&|j|ƒq&W|S)Nú:ré)ÚlowerÚlenÚkeysÚisspaceÚappend)Úselfr%ÚnZlstZhitÚlinerrrÚgetallmatchingheaders¹s z!HTTPMessage.getallmatchingheadersN)Ú__name__Ú __module__Ú __qualname__r3rrrrr(²sr(cCs\g}xR|jtdƒ}t|ƒtkr(tdƒ‚|j|ƒt|ƒtkrJtdtƒ‚|dkrPqW|S)Nr*z header linezgot more than %d headersó ó ó)r7r8r9)ÚreadlineÚ_MAXLINEr,rr/Ú _MAXHEADERSr)ÚfpÚheadersr2rrrÚ _read_headersÐs    r?cCs,t|ƒ}dj|ƒjdƒ}tjj|d�j|ƒS)Nr9z iso-8859-1)Ú_class)r?ÚjoinÚdecodeÚemailÚparserZParserZparsestr)r=r@r>ZhstringrrrÚ parse_headersâs rEcseZdZd@dd„Zdd„Zdd„Zd d „Zd d „Z‡fd d„Z‡fdd„Z dd„Z dd„Z dAdd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„ZdCd(d)„ZdEd*d+„ZdG‡fd,d-„ Zd.d/„Zd0d1„Zd2d3„ZdHd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z ‡Z!S)IrrNcCsR|jdƒ|_||_||_d|_|_t|_t|_t|_ t|_ t|_ t|_ t|_ dS)NÚrb)Úmakefiler=Ú debuglevelÚ_methodr>ÚmsgÚ_UNKNOWNÚversionÚstatusÚreasonÚchunkedÚ chunk_leftÚlengthÚ will_close)r0ÚsockrHÚmethodÚurlrrrÚ__init__ús  zHTTPResponse.__init__cCst|jjtdƒdƒ}t|ƒtkr*tdƒ‚|jdkrBtdt|ƒƒ|sNt dƒ‚y|j ddƒ\}}}WnFt k rªy|j ddƒ\}}d}Wnt k r¤d}YnXYnX|j d ƒsÆ|j ƒt|ƒ‚y$t|ƒ}|d ksà|d krèt|ƒ‚Wnt k �rt|ƒ‚YnX|||fS) Nr*z iso-8859-1z status linerzreply:z-Remote end closed connection without responseéÚzHTTP/riç)Ústrr=r:r;r,rrHÚprintÚreprrÚsplitÚ ValueErrorÚ startswithÚ _close_connrÚint)r0r2rLrMrNrrrÚ _read_statuss2    zHTTPResponse._read_statusc Csê|jdk rdSx<|jƒ\}}}|tkr(Pt|jƒ}|jdkrFtd|ƒ~qW||_|_|j ƒ|_ |dkrrd|_ n|j dƒr„d|_ nt |ƒ‚t|jƒ|_|_|jdkrÐx&|jD]}td|d |jj|ƒƒq°W|jjd ƒ}|rú|jƒd krúd |_d|_nd |_|jƒ|_d|_|jjdƒ}|jjd ƒ}|�rx|j �rxyt|ƒ|_Wntk �rbd|_YnX|jdk�r~d|_nd|_|tk�sº|tk�sºd|k�o¦dkn�sº|jdk�rÀd|_|j �ræ|j �ræ|jdk�ræd |_dS)Nrzheaders:úHTTP/1.0úHTTP/0.9é zHTTP/1.é zheader:r)ztransfer-encodingrOTFzcontent-lengthréÈÚHEAD)rbrc)r>raZCONTINUEr?r=rHrZÚcoderMÚstriprNrLr^rrErJÚgetr+rOrPÚ _check_closerRrQr`r]Z NO_CONTENTZ NOT_MODIFIEDrI)r0rLrMrNZskipped_headersÚhdrZtr_encrQrrrÚbegin9s\                   zHTTPResponse.begincCs‚|jjdƒ}|jdkr:|jjdƒ}|r6d|jƒkr6dSdS|jjdƒrJdS|r^d|jƒkr^dS|jjdƒ}|r~d|jƒkr~dSdS)NZ connectionreÚcloseTFz keep-alivezproxy-connection)r>rjrLr+)r0ZconnZpconnrrrrk„s     zHTTPResponse._check_closecCs|j}d|_|jƒdS)N)r=rn)r0r=rrrr_¢szHTTPResponse._close_connc s$ztƒjƒWd|jr|jƒXdS)N)Úsuperrnr=r_)r0)Ú __class__rrrn§szHTTPResponse.closecstƒjƒ|jr|jjƒdS)N)roÚflushr=)r0)rprrrq³s zHTTPResponse.flushcCsdS)NTr)r0rrrÚreadable¸szHTTPResponse.readablecCs |jdkS)N)r=)r0rrrÚisclosed¾szHTTPResponse.isclosedc Cs¼|jdkrdS|jdkr$|jƒdS|dk rRt|ƒ}|j|ƒ}t|ƒd|…jƒS|jr`|jƒS|j dkrv|jj ƒ}n6y|j |j ƒ}Wnt k r¤|jƒ‚YnXd|_ |jƒ|SdS)Nr9rgr) r=rIr_Ú bytearrayÚreadintoÚ memoryviewÚtobytesrOÚ_readall_chunkedrQÚreadÚ _safe_readr )r0ÚamtÚbr1ÚsrrrryÈs*     zHTTPResponse.readcCs¨|jdkrdS|jdkr$|jƒdS|jr4|j|ƒS|jdk r^t|ƒ|jkr^t|ƒd|j…}|jj|ƒ}| r~|r~|jƒn&|jdk r¤|j|8_|js¤|jƒ|S)Nrrg) r=rIr_rOÚ_readinto_chunkedrQr,rvru)r0r|r1rrrruès$        zHTTPResponse.readintoc Csp|jjtdƒ}t|ƒtkr$tdƒ‚|jdƒ}|dkrB|d|…}y t|dƒStk rj|jƒ‚YnXdS)Nr*z chunk sizeó;ré) r=r:r;r,rÚfindr`r]r_)r0r2ÚirrrÚ_read_next_chunk_size s    z"HTTPResponse._read_next_chunk_sizecCs>x8|jjtdƒ}t|ƒtkr&tdƒ‚|s,P|dkrPqWdS)Nr*z trailer lineó r8r9)r„r8r9)r=r:r;r,r)r0r2rrrÚ_read_and_discard_trailers z&HTTPResponse._read_and_discard_trailerc Csl|j}|sh|dk r|jdƒy |jƒ}Wntk rDtdƒ‚YnX|dkrb|jƒ|jƒd}||_|S)NrWr9r)rPrzrƒr]r r…r_)r0rPrrrÚ_get_chunk_left(s  zHTTPResponse._get_chunk_leftc Csdg}y8x,|jƒ}|dkrP|j|j|ƒƒd|_qWdj|ƒStk r^tdj|ƒƒ‚YnXdS)Nrr9)r†r/rzrPrAr )r0ÚvaluerPrrrrx@s  zHTTPResponse._readall_chunkedc Cs°d}t|ƒ}yvxp|jƒ}|dkr$|St|ƒ|krL|j|ƒ}|||_||S|d|…}|j|ƒ}||d…}||7}d|_qWWn(tk rªtt|d|…ƒƒ‚YnXdS)Nr)rvr†r,Ú_safe_readintorPr Úbytes)r0r|Ú total_bytesÚmvbrPr1Útemp_mvbrrrr~Ns$      zHTTPResponse._readinto_chunkedcCsXg}xH|dkrL|jjt|tƒƒ}|s4tdj|ƒ|ƒ‚|j|ƒ|t|ƒ8}qWdj|ƒS)Nrr9)r=ryÚminÚ MAXAMOUNTr rAr/r,)r0r{r}Úchunkrrrrzfs  zHTTPResponse._safe_readcCs†d}t|ƒ}xt|t|ƒkr€tt|ƒkr@|dt…}|jj|ƒ}n |jj|ƒ}|sjtt|d|…ƒt|ƒƒ‚||d…}||7}qW|S)Nr)rvr,rŽr=rur r‰)r0r|rŠr‹rŒr1rrrrˆ}s     zHTTPResponse._safe_readintor*c Csº|jdks|jdkrdS|jr(|j|ƒS|jdk rJ|dksD||jkrJ|j}y|jj|ƒ}Wn*tk r„|dkrt‚|jjdƒ}YnX| rš|rš|jƒn|jdk r¶|jt|ƒ8_|S)Nrgr9rr€ii@) r=rIrOÚ_read1_chunkedrQÚread1r]r_r,)r0r1Úresultrrrr‘�s"    zHTTPResponse.read1cCs4|jdks|jdkrdS|jr(|j|ƒS|jj|ƒS)Nrgr9)r=rIrOÚ _peek_chunkedÚpeek)r0r1rrrr”¥s  zHTTPResponse.peekcsŒ|jdks|jdkrdS|jr*tƒj|ƒS|jdk rL|dksF||jkrL|j}|jj|ƒ}| rl|rl|jƒn|jdk rˆ|jt|ƒ8_|S)Nrgr9r)r=rIrOror:rQr_r,)r0Úlimitr’)rprrr:®s     zHTTPResponse.readlinecCsf|jƒ}|dks|dkrdSd|ko.|kns8|}|jj|ƒ}|jt|ƒ8_|sbtdƒ‚|S)Nrr9)r†r=r‘rPr,r )r0r1rPryrrrr�½s zHTTPResponse._read1_chunkedc CsBy |jƒ}Wntk r dSX|dkr.dS|jj|ƒd|…S)Nr9)r†r r=r”)r0r1rPrrrr“Ës zHTTPResponse._peek_chunkedcCs |jjƒS)N)r=Úfileno)r0rrrr–ØszHTTPResponse.filenocCsH|jdkrtƒ‚|jj|ƒp|}t|tƒs6t|dƒ r:|Sdj|ƒSdS)NÚ__iter__z, )r>rZget_allÚ isinstancerYÚhasattrrA)r0r%Údefaultr>rrrÚ getheaderÛs zHTTPResponse.getheadercCs|jdkrtƒ‚t|jjƒƒS)N)r>rÚlistÚitems)r0rrrÚ getheadersïs zHTTPResponse.getheaderscCs|S)Nr)r0rrrr—÷szHTTPResponse.__iter__cCs|jS)N)r>)r0rrrÚinfoüszHTTPResponse.infocCs|jS)N)rU)r0rrrÚgeturls zHTTPResponse.geturlcCs|jS)N)rM)r0rrrÚgetcodeszHTTPResponse.getcode)rNN)Néÿÿÿÿ)r¢r¢)r¢r¢)r¢)N)"r4r5r6rVrarmrkr_rnrqrrrsryrurƒr…r†rxr~rzrˆr‘r”r:r�r“r–r›ržr—rŸr r¡Ú __classcell__rr)rprrñs< !K  "     c@sðeZdZdZdZeZeZdZ dZ e dd„ƒZ e dd„ƒZ d ejd fd d „Zd0d d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd1dd „Zd2d!d"„Zd#d$„Zd%d&„Zd3dd'œd(d)„Zd ifdd'œd*d+„Zd,d-„Z d.d/„Z!d S)4rrezHTTP/1.1r*rcCs t|tjƒS)N)r˜ÚioÚ TextIOBase)ÚstreamrrrÚ _is_textIO0szHTTPConnection._is_textIOc Csd|dkr|jƒtkrdSdSt|dƒr*dSyt|ƒ}|jStk rLYnXt|tƒr`t|ƒSdS)Nrry) ÚupperÚ_METHODS_EXPECTING_BODYr™rvÚnbytesÚ TypeErrorr˜rYr,)ÚbodyrTZmvrrrÚ_get_content_length6s   z"HTTPConnection._get_content_lengthNcCs\||_||_d|_g|_d|_t|_d|_d|_d|_ i|_ |j ||ƒ\|_ |_ tj|_dS)N)ÚtimeoutÚsource_addressrSÚ_bufferÚ_HTTPConnection__responseÚ_CS_IDLEÚ_HTTPConnection__staterIÚ _tunnel_hostÚ _tunnel_portÚ_tunnel_headersÚ _get_hostportÚhostÚportÚsocketZcreate_connectionÚ_create_connection)r0r¸r¹r®r¯rrrrVVszHTTPConnection.__init__cCs<|jrtdƒ‚|j||ƒ\|_|_|r.||_n |jjƒdS)Nz.Can't set up tunnel for established connection)rSÚ RuntimeErrorr·r´rµr¶Úclear)r0r¸r¹r>rrrÚ set_tunnelis zHTTPConnection.set_tunnelc CsÊ|dkrÂ|jdƒ}|jdƒ}||kr”yt||dd…ƒ}WnHtk r„||dd…dkrh|j}ntd||dd…ƒ‚YnX|d|…}n|j}|rÂ|ddkrÂ|ddkrÂ|dd …}||fS) Nr)ú]r*rXznonnumeric port: '%s'rú[r¢r¢)Úrfindr`r]Ú default_portr )r0r¸r¹r‚Újrrrr·�s   zHTTPConnection._get_hostportcCs ||_dS)N)rH)r0ÚlevelrrrÚset_debuglevel•szHTTPConnection.set_debuglevelc Csd|j|jf}|jdƒ}|j|ƒx6|jjƒD](\}}d||f}|jdƒ}|j|ƒq0W|jdƒ|j|j|jd�}|j ƒ\}} } | t j j kr®|j ƒtd| | jƒfƒ‚xP|jjtdƒ} t| ƒtkrÔtd ƒ‚| sÚP| dkräP|jd kr°td | jƒƒq°WdS)NzCONNECT %s:%d HTTP/1.0 Úasciiz%s: %s zlatin-1ó )rTzTunnel connection failed: %d %sr*z header liner8r9rzheader:)rÇr8r9)r´rµrÚsendr¶r�Úresponse_classrSrIraÚhttpÚ HTTPStatusZOKrnÚOSErrorrir=r:r;r,rrHrZrB) r0Z connect_strZ connect_bytesÚheaderr‡Z header_strZ header_bytesÚresponserLrhÚmessager2rrrÚ_tunnel˜s2         zHTTPConnection._tunnelcCsB|j|j|jf|j|jƒ|_|jjtjtj dƒ|j r>|j ƒdS)Nr*) r»r¸r¹r®r¯rSZ setsockoptrºZ IPPROTO_TCPZ TCP_NODELAYr´rÐ)r0rrrÚconnect·s zHTTPConnection.connectc CsBt|_z|j}|r d|_|jƒWd|j}|rràrrrrðöszHTTPConnection.requestc Csütdd„|Dƒƒ}i}d|kr&d|d<d|kr6d|d<|j||f|Žd|kr°d |kr´d }|j||ƒ}|dkrž|dk r®|jd krŒtd |ƒd }|jddƒq´|jdt|ƒƒnd }x |jƒD]\} } |j| | ƒq¾Wt|tƒrêt |dƒ}|j ||d�dS)Ncss|]}|jƒVqdS)N)r+)rÚkrrrú ýsz/HTTPConnection._send_request..r¸r*rízaccept-encodingrîzcontent-lengthztransfer-encodingFrzUnable to determine size of %rTzTransfer-EncodingrOzContent-Lengthr¬)rà) Ú frozensetrñr­rHrZrìrYr�r˜r'rø) r0rTrUr¬r>ràZ header_namesZskipsZcontent_lengthrlr‡rrrrùûs0      zHTTPConnection._send_requestcCsÌ|jr|jjƒrd|_|jtks&|jr0t|jƒ‚|jdkrR|j|j|j|jd�}n|j|j|jd�}yLy |j ƒWnt k r�|j ƒ‚YnXt |_|j r¨|j ƒn||_|S|j ƒ‚YnXdS)Nr)rT)r±rsr³r÷rrHrÉrSrIrmÚConnectionErrorrnr²rR)r0rÎrrrÚ getresponse)s,      zHTTPConnection.getresponse)NN)NF)FF)N)"r4r5r6rÞrërrÉÚ HTTP_PORTrÂrÒrHÚ staticmethodr§r­rºÚ_GLOBAL_DEFAULT_TIMEOUTrVr¾r·rÅrÐrÑrnrÈrÙrÚrárñrçrìrørðrùrþrrrrr&s<     ' 6   .csBeZdZeZdddejdfdddœ‡fdd„ Z‡fdd„Z‡Z S)ÚHTTPSConnectionN)ÚcontextÚcheck_hostnamec sÐtt|ƒj||||ƒ|dk s.|dk s.|dk rDddl} | jdtdƒ||_||_|dkrptj ƒ}|j dk rpd|_ |j tj k} |dkrŠ|j }|rœ| rœtdƒ‚|s¤|rÀ|j||ƒ|j dk rÀd|_ ||_||_dS)NrzTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rWTzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rorrVÚwarningsÚwarnÚDeprecationWarningÚkey_fileÚ cert_fileÚsslZ_create_default_https_contextZpost_handshake_authZ verify_modeZ CERT_NONErr]Zload_cert_chainÚ_contextÚ_check_hostname) r0r¸r¹rr r®r¯rrrZ will_verify)rprrrVts0     zHTTPSConnection.__init__c sŒtƒjƒ|jr|j}n|j}|jj|j|d�|_|jj rˆ|jrˆyt j |jj ƒ|ƒWn.t k r†|jj tjƒ|jjƒ‚YnXdS)N)Úserver_hostname)rorÑr´r¸r Z wrap_socketrSrr r Zmatch_hostnameZ getpeercertÚ ExceptionZshutdownrºZ SHUT_RDWRrn)r0r )rprrrÑ–s    zHTTPSConnection.connect) r4r5r6Ú HTTPS_PORTrÂrºrrVrÑr£rr)rprrms rc@s eZdZdS)rN)r4r5r6rrrrr¬sc@s eZdZdS)rN)r4r5r6rrrrr±sc@s eZdZdS)r N)r4r5r6rrrrr ´sc@seZdZdd„ZdS)rcCs|f|_||_dS)N)ÚargsrL)r0rLrrrrV¸szUnknownProtocol.__init__N)r4r5r6rVrrrrr·sc@s eZdZdS)rN)r4r5r6rrrrr¼sc@s eZdZdS)r N)r4r5r6rrrrr ¿sc@s&eZdZddd„Zdd„Zdd„ZdS) r NcCs|f|_||_||_dS)N)rÚpartialÚexpected)r0rrrrrrVÃszIncompleteRead.__init__cCs2|jdk rd|j}nd}d|jjt|jƒ|fS)Nz, %i more expectedrXz%s(%i bytes read%s))rrpr4r,r)r0ÚerrrÚ__repr__Çs   zIncompleteRead.__repr__cCst|ƒS)N)r[)r0rrrÚ__str__ÎszIncompleteRead.__str__)N)r4r5r6rVrrrrrrr Âs c@s eZdZdS)r N)r4r5r6rrrrr Ñsc@s eZdZdS)r N)r4r5r6rrrrr Ôsc@s eZdZdS)rN)r4r5r6rrrrr×sc@s eZdZdS)rN)r4r5r6rrrrrÚsc@seZdZdd„ZdS)rcCs|s t|ƒ}|f|_||_dS)N)r[rr2)r0r2rrrrVÞszBadStatusLine.__init__N)r4r5r6rVrrrrrÝsc@seZdZdd„ZdS)rcCstj|dt|fƒdS)Nz&got more than %d bytes when reading %s)rrVr;)r0Z line_typerrrrVåszLineTooLong.__init__N)r4r5r6rVrrrrräsc@seZdZdd„ZdS)rcOs"tj|dƒtj|f|ž|ŽdS)NrX)rrVÚConnectionResetError)r0ÚposÚkwrrrrVês zRemoteDisconnected.__init__N)r4r5r6rVrrrrrés)r)AZ email.parserrCZ email.messagerÊr¤ÚosÚrerºrÓZ urllib.parserÚ__all__rÿrrKr²rær÷ÚglobalsÚupdaterËÚ __members__rörrŽr;r<ÚcompileÚ fullmatchrórérõrèròr©r'rÏZMessager(r?rEÚBufferedIOBaserrr Ú ImportErrorrr/rrrr rrr r r r rrrrrrrrrrrÚGs„        9F =