U e5d™Øã@sbddlZddlZddlZddlZddlZddlZddlZddl m Z ddddddd d d d d dddddddgZ dZ dZ dZdZdZdZeƒ ejj¡dd„ejj ¡DƒZdZdZe d¡jZe d ¡jZe d!¡Ze d"¡Z d#d$d%hZ!dAd'd(„Z"Gd)d*„d*ej#j$ƒZ%d+d,„Z&e%fd-d.„Z'Gd/d„dej(ƒZ)Gd0d„dƒZ*z ddl+Z+Wne,k �r\YnXGd1d2„d2e*ƒZ-e  .d2¡Gd3d„de/ƒZ0Gd4d„de0ƒZ1Gd5d „d e0ƒZ2Gd6d„de0ƒZ3Gd7d„de0ƒZ4Gd8d „d e0ƒZ5Gd9d „d e0ƒZ6Gd:d „d e0ƒZ7Gd;d „d e7ƒZ8Gdd„de0ƒZ;Gd?d„de0ƒZe0Z?dS)Bé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.8/http/client.pyÚ jsriéds[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]z[-]ZPATCHZPOSTZPUTÚdatac Cshz | d¡WStk rb}z8t|j|j|j|jd| ¡||j|j…|fƒd‚W5d}~XYnXdS)Núlatin-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)Ú HTTPMessagecCsj| ¡d}t|ƒ}g}d}| ¡D]@}|d|… ¡|krBd}n|dd… ¡sVd}|r$| |¡q$|S)Nú:ré)ÚlowerÚlenÚkeysÚisspaceÚappend)Úselfr&ÚnZlstZhitÚlinerrrÚgetallmatchingheadersµs   z!HTTPMessage.getallmatchingheadersN)Ú__name__Ú __module__Ú __qualname__r4rrrrr)®sr)cCsXg}| td¡}t|ƒtkr&tdƒ‚| |¡t|ƒtkrHtdtƒ‚|dkrqTq|S)Nr+ú header linezgot more than %d headers©ó ó ó)ÚreadlineÚ_MAXLINEr-rr0Ú _MAXHEADERSr)ÚfpÚheadersr3rrrÚ _read_headersÌs    rBcCs,t|ƒ}d |¡ d¡}tjj|d� |¡S)Nr<ú iso-8859-1)Ú_class)rBÚjoinÚdecodeÚemailÚparserZParserZparsestr)r@rDrAZhstringrrrÚ parse_headersÞs rIcseZdZd@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&„ZdBd(d)„ZdCd*d+„ZdD‡fd,d-„ Zd.d/„Zd0d1„Zd2d3„ZdEd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z ‡Z!S)FrrNcCsR| d¡|_||_||_d|_|_t|_t|_t|_ t|_ t|_ t|_ t|_ dS)NÚrb)Zmakefiler@Ú debuglevelÚ_methodrAÚmsgÚ_UNKNOWNÚversionÚstatusÚreasonÚchunkedÚ chunk_leftÚlengthÚ will_close)r1ÚsockrKÚmethodÚurlrrrÚ__init__ös  zHTTPResponse.__init__c Cst|j td¡dƒ}t|ƒtkr*tdƒ‚|jdkrBtdt|ƒƒ|sNt dƒ‚z|  dd¡\}}}WnFt k rªz|  dd¡\}}d}Wnt k r¤d}YnXYnX|  d ¡sÆ|  ¡t|ƒ‚z$t|ƒ}|d ksà|d krèt|ƒ‚Wnt k �rt|ƒ‚YnX|||fS) Nr+rCz status linerzreply:z-Remote end closed connection without responseéÚzHTTP/riç)Ústrr@r=r>r-rrKÚprintÚreprrÚsplitÚ ValueErrorÚ startswithÚ _close_connrÚint)r1r3rOrPrQrrrÚ _read_statuss2    zHTTPResponse._read_statusc CsÎ|jdk rdS| ¡\}}}|tkr&qHt|jƒ}|jdkrDtd|ƒ~q||_|_|  ¡|_ |dkrnd|_ n|  d¡r€d|_ nt |ƒ‚t|jƒ|_|_|jdkrÈ|j ¡D]\}}td|d|ƒq®|j d ¡}|rò| ¡d kròd |_d|_nd |_| ¡|_d|_|j d ¡}|�rb|j�sbzt|ƒ|_Wntk �rLd|_YnX|jdk�rhd|_nd|_|tk�s¢|tk�s¢d|k�r”dk�s¢n|jdk�r¨d|_|j�sÊ|j�sÊ|jdk�rÊd |_dS)Nrzheaders:)zHTTP/1.0zHTTP/0.9é zHTTP/1.é úheader:r*útransfer-encodingrRTFúcontent-lengthréÈÚHEAD)rArdZCONTINUErBr@rKr]ÚcoderPÚstriprQrOrarrIrMÚitemsÚgetr,rRrSÚ _check_closerUrTrcr`Z NO_CONTENTZ NOT_MODIFIEDrL) r1rOrPrQZskipped_headersÚhdrÚvalZtr_encrTrrrÚbegin5sf             ÿ ÿ þÿþzHTTPResponse.begincCsv|j d¡}|jdkr.|r*d| ¡kr*dSdS|j d¡r>dS|rRd| ¡krRdS|j d¡}|rrd| ¡krrdSdS)NZ connectionrfÚcloseTFz keep-alivezproxy-connection)rArorOr,)r1ZconnZpconnrrrrp}s    zHTTPResponse._check_closecCs|j}d|_| ¡dS©N)r@rt)r1r@rrrrbšszHTTPResponse._close_conncs$ztƒ ¡W5|jr| ¡XdSru)r@rbÚsuperrt©r1©Ú __class__rrrtŸszHTTPResponse.closecstƒ ¡|jr|j ¡dSru)rvÚflushr@rwrxrrrz«s zHTTPResponse.flushcCsdS)NTrrwrrrÚreadable°szHTTPResponse.readablecCs |jdkSru)r@rwrrrÚisclosed¶szHTTPResponse.isclosedcCs¼|jdkrdS|jdkr$| ¡dS|dk rRt|ƒ}| |¡}t|ƒd|… ¡S|jr`| ¡S|j dkrv|j  ¡}n6z|  |j ¡}Wnt k r¤| ¡‚YnXd|_ | ¡|SdS)Nr<rkr) r@rLrbÚ bytearrayÚreadintoÚ memoryviewÚtobytesrRÚ_readall_chunkedrTÚreadÚ _safe_readr )r1ÚamtÚbr2Úsrrrr‚Às*     zHTTPResponse.readcCs¦|jdkrdS|jdkr$| ¡dS|jr4| |¡S|jdk r^t|ƒ|jkr^t|ƒd|j…}|j |¡}|s||r|| ¡n&|jdk r¢|j|8_|js¢| ¡|S)Nrrk) r@rLrbrRÚ_readinto_chunkedrTr-rr~)r1r…r2rrrr~às$       zHTTPResponse.readintocCsr|j td¡}t|ƒtkr$tdƒ‚| d¡}|dkrB|d|…}z t|dƒWStk rl| ¡‚YnXdS)Nr+z chunk sizeó;ré) r@r=r>r-rÚfindrcr`rb)r1r3ÚirrrÚ_read_next_chunk_sizes    z"HTTPResponse._read_next_chunk_sizecCs:|j td¡}t|ƒtkr$tdƒ‚|s*q6|dkrq6qdS)Nr+z trailer liner9)r@r=r>r-r©r1r3rrrÚ_read_and_discard_trailers z&HTTPResponse._read_and_discard_trailercCsl|j}|sh|dk r| d¡z | ¡}Wntk rDtdƒ‚YnX|dkrb| ¡| ¡d}||_|S)NrZr<r)rSrƒrŒr`r rŽrb)r1rSrrrÚ_get_chunk_left s  zHTTPResponse._get_chunk_leftcCsbg}z6| ¡}|dkrq0| | |¡¡d|_qd |¡WStk r\td |¡ƒ‚YnXdS©Nrr<)r�r0rƒrSrEr )r1ÚvaluerSrrrr�8s zHTTPResponse._readall_chunkedcCs°d}t|ƒ}zv| ¡}|dkr$|WSt|ƒ|krN| |¡}|||_||WS|d|…}| |¡}||d…}||7}d|_qWn(tk rªtt|d|…ƒƒ‚YnXdS)Nr)rr�r-Ú_safe_readintorSr Úbytes)r1r…Z total_bytesZmvbrSr2Ztemp_mvbrrrr‡Fs"        zHTTPResponse._readinto_chunkedcCs.|j |¡}t|ƒ|kr*t||t|ƒƒ‚|Sru)r@r‚r-r )r1r„rrrrrƒ^s  zHTTPResponse._safe_readcCs:t|ƒ}|j |¡}||kr6tt|d|…ƒ||ƒ‚|Sru)r-r@r~r r“)r1r…r„r2rrrr’js  zHTTPResponse._safe_readintoéÿÿÿÿcCsˆ|jdks|jdkrdS|jr(| |¡S|jdk rJ|dksD||jkrJ|j}|j |¡}|sh|rh| ¡n|jdk r„|jt|ƒ8_|S©Nrkr<r)r@rLrRÚ_read1_chunkedrTÚread1rbr-)r1r2Úresultrrrr—rs    zHTTPResponse.read1cCs4|jdks|jdkrdS|jr(| |¡S|j |¡S)Nrkr<)r@rLrRÚ _peek_chunkedÚpeek)r1r2rrrršƒs  zHTTPResponse.peekcsŠ|jdks|jdkrdS|jr*tƒ |¡S|jdk rL|dksF||jkrL|j}|j |¡}|sj|rj| ¡n|jdk r†|jt|ƒ8_|Sr•)r@rLrRrvr=rTrbr-)r1Úlimitr˜rxrrr=Œs    zHTTPResponse.readlinecCsd| ¡}|dks|dkrdSd|kr0|ks6n|}|j |¡}|jt|ƒ8_|s`tdƒ‚|Sr�)r�r@r—rSr-r )r1r2rSr‚rrrr–›s zHTTPResponse._read1_chunkedcCsDz | ¡}Wntk r"YdSX|dkr0dS|j |¡d|…S)Nr<)r�r r@rš)r1r2rSrrrr™©s zHTTPResponse._peek_chunkedcCs |j ¡Sru)r@Úfilenorwrrrrœ¶szHTTPResponse.filenocCsF|jdkrtƒ‚|j |¡p|}t|tƒs4t|dƒs8|Sd |¡SdS)NÚ__iter__z, )rArZget_allÚ isinstancer\ÚhasattrrE)r1r&ÚdefaultrArrrÚ getheader¹s zHTTPResponse.getheadercCs|jdkrtƒ‚t|j ¡ƒSru)rArÚlistrnrwrrrÚ getheadersÍs zHTTPResponse.getheaderscCs|Srurrwrrrr�ÕszHTTPResponse.__iter__cCs|jSru)rArwrrrÚinfoÚszHTTPResponse.infocCs|jSru)rXrwrrrÚgeturlñs zHTTPResponse.geturlcCs|jSru)rPrwrrrÚgetcodeýszHTTPResponse.getcode)rNN)N)r”)r”)r”)N)"r5r6r7rYrdrsrprbrtrzr{r|r‚r~rŒrŽr�r�r‡rƒr’r—ršr=r–r™rœr¡r£r�r¤r¥r¦Ú __classcell__rrrxrrís< !H  "      c@s eZdZdZdZeZeZdZ dZ e dd„ƒZ e dd„ƒZ d ejd d fd d „Zd7d d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd8d d!„Zd9d"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Z d:dd.œd/d0„Z!d ifdd.œd1d2„Z"d3d4„Z#d5d6„Z$d S);rrfzHTTP/1.1r+rcCs t|tjƒSru)ržÚioÚ TextIOBase)ÚstreamrrrÚ _is_textIOszHTTPConnection._is_textIOcCsf|dkr| ¡tkrdSdSt|dƒr*dSzt|ƒ}|jWStk rNYnXt|tƒrbt|ƒSdS)Nrr‚) ÚupperÚ_METHODS_EXPECTING_BODYrŸrÚnbytesÚ TypeErrorržr\r-)ÚbodyrWZmvrrrÚ_get_content_lengths   z"HTTPConnection._get_content_lengthNé cCsn||_||_||_d|_g|_d|_t|_d|_d|_ d|_ i|_ |  ||¡\|_ |_| |j ¡tj|_dSru)ÚtimeoutÚsource_addressÚ blocksizerVÚ_bufferÚ_HTTPConnection__responseÚ_CS_IDLEÚ_HTTPConnection__staterLÚ _tunnel_hostÚ _tunnel_portÚ_tunnel_headersÚ _get_hostportÚhostÚportÚ_validate_hostÚsocketZcreate_connectionÚ_create_connection)r1r¾r¿r³r´rµrrrrY4s zHTTPConnection.__init__cCs<|jrtdƒ‚| ||¡\|_|_|r.||_n |j ¡dS)Nz.Can't set up tunnel for established connection)rVÚ RuntimeErrorr½rºr»r¼Úclear)r1r¾r¿rArrrÚ set_tunnelJs zHTTPConnection.set_tunnelcCsÊ|dkrÂ| d¡}| d¡}||kr”zt||dd…ƒ}WnHtk r„||dd…dkrh|j}ntd||dd…ƒ‚YnX|d|…}n|j}|rÂ|ddkrÂ|ddkrÂ|dd…}||fS) Nr*ú]r+r[znonnumeric port: '%s'rú[r”)Úrfindrcr`Ú default_portr )r1r¾r¿r‹Újrrrr½bs   zHTTPConnection._get_hostportcCs ||_dSru)rK)r1ÚlevelrrrÚset_debuglevelvszHTTPConnection.set_debuglevelc Csüd|j|jf}| d¡}| |¡|j ¡D](\}}d||f}| d¡}| |¡q.| d¡|j|j|jd�}|  ¡\}} } | t j j krª|  ¡td| |  ¡fƒ‚|j td¡} t| ƒtkrÎtd ƒ‚| sÔqø| d krÞqø|jd krªtd |  ¡ƒqªdS) NzCONNECT %s:%d HTTP/1.0 Úasciiz%s: %s rr:©rWzTunnel connection failed: %d %sr+r8r9rrg)rºr»rÚsendr¼rnÚresponse_classrVrLrdÚhttpÚ HTTPStatusZOKrtÚOSErrorrmr@r=r>r-rrKr]rF) r1Z connect_strZ connect_bytesÚheaderr‘Z header_strZ header_bytesÚresponserOrlÚmessager3rrrÚ_tunnelys4ÿ       ÿ  zHTTPConnection._tunnelcCsB| |j|jf|j|j¡|_|j tjtj d¡|j r>|  ¡dS)Nr+) rÂr¾r¿r³r´rVZ setsockoptrÁZ IPPROTO_TCPZ TCP_NODELAYrºr×rwrrrÚconnect˜s ÿzHTTPConnection.connectcCsBt|_z|j}|r d|_| ¡W5|j}|rìsz/HTTPConnection._send_request..r¾r+rõzaccept-encodingrörirhFrzUnable to determine size of %rTzTransfer-EncodingrRzContent-Lengthr°r) Ú frozensetrør±rKr]rôr\rnržr(r) r1rWrXr°rAréZ header_namesZskipsZcontent_lengthrqr‘rrrr ês0      zHTTPConnection._send_requestcCsÎ|jr|j ¡rd|_|jtks&|jr0t|jƒ‚|jdkrR|j|j|j|jd�}n|j|j|jd�}zNz |  ¡Wnt k r�|  ¡‚YnXt |_|j r¨|  ¡n||_|WS|  ¡‚YnXdS)NrrÎ)r·r|r¹rrrKrÐrVrLrsÚConnectionErrorrtr¸rU)r1rÕrrrÚ getresponses.   ÿ  zHTTPConnection.getresponse)NN)NF)FF)N)%r5r6r7rçròrrÐÚ HTTP_PORTrÉrÛrKÚ staticmethodr«r±rÁÚ_GLOBAL_DEFAULT_TIMEOUTrYrÅr½rÌr×rØrtrÏrârãrërørórðrñrÀrôrr÷r rrrrrrsL  ÿ   & 6ÿ   ÿ .csDeZdZeZdddejdfddddœ‡fdd„ Z‡fdd„Z‡Z S)ÚHTTPSConnectionNr²)ÚcontextÚcheck_hostnamerµc sÜtt|ƒj||||| d�|dk s2|dk s2|dk rHddl} |  dtd¡||_||_|dkrtt  ¡}|j dk rtd|_ |j tj k} |dkrŽ|j }|rž| sžtdƒ‚|s¦|rÂ| ||¡|j dk rÂd|_ ||_|dk rØ||j_ dS)N)rµrzTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rZTzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rvrrYÚwarningsÚwarnÚDeprecationWarningÚkey_fileÚ cert_fileÚsslZ_create_default_https_contextZpost_handshake_authZ verify_modeZ CERT_NONErr`Zload_cert_chainÚ_context) r1r¾r¿rrr³r´rrrµrZ will_verifyrxrrrYcs<þÿþ    zHTTPSConnection.__init__cs6tƒ ¡|jr|j}n|j}|jj|j|d�|_dS)N)Úserver_hostname)rvrØrºr¾rZ wrap_socketrV)r1rrxrrr؇s  ÿzHTTPSConnection.connect) r5r6r7Ú HTTPS_PORTrÉrÁrrYrØr§rrrxrr\sþý$rc@s eZdZdS)rN©r5r6r7rrrrr–sc@s eZdZdS)rNrrrrrr›sc@s eZdZdS)r Nrrrrrr žsc@seZdZdd„ZdS)rcCs|f|_||_dSru)ÚargsrO)r1rOrrrrY¢szUnknownProtocol.__init__N©r5r6r7rYrrrrr¡sc@s eZdZdS)rNrrrrrr¦sc@s eZdZdS)r Nrrrrrr ©sc@s$eZdZddd„Zdd„ZejZdS)r NcCs|f|_||_||_dSru)rÚpartialÚexpected)r1r!r"rrrrY­szIncompleteRead.__init__cCs2|jdk rd|j}nd}d|jjt|jƒ|fS)Nz, %i more expectedr[z%s(%i bytes read%s))r"ryr5r-r!)r1ÚerrrÚ__repr__±s  ÿzIncompleteRead.__repr__)N)r5r6r7rYr$r"Ú__str__rrrrr ¬s c@s eZdZdS)r Nrrrrrr ºsc@s eZdZdS)r Nrrrrrr ½sc@s eZdZdS)rNrrrrrrÀsc@s eZdZdS)rNrrrrrrÃsc@seZdZdd„ZdS)rcCs|s t|ƒ}|f|_||_dSru)r^rr3r�rrrrYÇszBadStatusLine.__init__Nr rrrrrÆsc@seZdZdd„ZdS)rcCst |dt|f¡dS)Nz&got more than %d bytes when reading %s)rrYr>)r1Z line_typerrrrYÎsÿzLineTooLong.__init__Nr rrrrrÍsc@seZdZdd„ZdS)rcOs"t |d¡tj|f|ž|ŽdS)Nr[)rrYÚConnectionResetError)r1ÚposÚkwrrrrYÓs zRemoteDisconnected.__init__Nr rrrrrÒs)r)@Z email.parserrGZ email.messagerÑr¨ÚrerÁZcollections.abcrÜZ urllib.parserÚ__all__rrrNr¸rïrÚglobalsÚupdaterÒÚ __members__rrr>r?ÚcompileÚ fullmatchrrürrrûr­r(rÖZMessager)rBrIÚBufferedIOBaserrrÚ ImportErrorrr0Ú Exceptionrrr rrr r r r rrrrr&rrrrrrÚGs– ú       W 8