a 97aò¹ã.@s€dZddlmZmZmZmZddlmZmZm Z m Z ddl m Z ddl mZddl mZddlmZddlZddlZddlZdd lmZddlZdd lmZe r®dd lmZn dd lmZgd ¢Zd Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2d Z3d!Z4d"Z5d#Z6d$Z7d%Z8d&Z9d'Z:d(Z;d)Zd,Z?d-Z@d.ZAd/ZBd0ZCd1ZDd2ZEd3ZFd4ZGd5ZHd6ZId7ZJd8ZKd9ZLd:ZMd;ZNdZQd?ZRd@ZSdAZTdBZUdCZVdDZWdEZXdFZYdGZZdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtduœ-Z[dvZ\dwZ]dZ^Gdxdy„dyej_ƒZ`e`fdzd{„ZaebƒZcGd|d}„d}ejdƒZeGd~d„debƒZfzddlgZgdd€lgmhZhWneiyŒYn0Gdd‚„d‚efƒZje kd‚¡Gdƒd„„d„elƒZmGd…d†„d†emƒZnGd‡dˆ„dˆemƒZoGd‰dŠ„dŠemƒZpGd‹dŒ„dŒemƒZqGddŽ„dŽemƒZrGdd„demƒZsGd‘d’„d’emƒZtGd“d”„d”etƒZuGd•d–„d–etƒZvGd—d˜„d˜etƒZwGd™dš„dšemƒZxGd›dœ„dœemƒZyemZzdS)aD HTTP/1.1 client library A backport of the Python 3.3 http/client.py module for python-future. HTTPConnection goes through a number of "states", which define when a client may legally make another request or fetch the response for a particular request. This diagram details these state transitions: (null) | | HTTPConnection() v Idle | | putrequest() v Request-started | | ( putheader() )* endheaders() v Request-sent | | response = getresponse() v Unread-response [Response-headers-read] |\____________________ | | | response.read() | putrequest() v v Idle Req-started-unread-response ______/| / | response.read() | | ( putheader() )* endheaders() v v Request-started Req-sent-unread-response | | response.read() v Request-sent This diagram presents the following rules: -- a second request may not be started until {response-headers-read} -- a response [object] cannot be retrieved until {request-sent} -- there is no differentiation between an unread response body and a partially read response body Note: this enforcement is applied by the HTTPConnection class. The HTTPResponse class does not enforce this state machine, which implies sophisticated clients may accelerate the request/response pipeline. Caution should be taken, though: accelerating the states beyond the above pattern may imply knowledge of the server's connection-close behavior for certain requests. For example, it is impossible to tell whether the server will close the connection UNTIL the response headers have been read; this means that further requests cannot be placed into the pipeline until it is known that the server will NOT be closing the connection. Logical State __state __response ------------- ------- ---------- Idle _CS_IDLE None Request-started _CS_REQ_STARTED None Request-sent _CS_REQ_SENT None Unread-response _CS_IDLE Req-started-unread-response _CS_REQ_STARTED Req-sent-unread-response _CS_REQ_SENT é)Úabsolute_importÚdivisionÚprint_functionÚunicode_literals)ÚbytesÚintÚstrÚsuper)ÚPY2)Úparser)Úmessage)Úcreate_connectionN)Úurlsplit)Úarray)ÚIterable)Ú HTTPResponseÚHTTPConnectionÚ HTTPExceptionÚ NotConnectedÚUnknownProtocolÚUnknownTransferEncodingÚUnimplementedFileModeÚIncompleteReadÚ InvalidURLÚImproperConnectionStateÚCannotSendRequestÚCannotSendHeaderÚResponseNotReadyÚ BadStatusLineÚerrorÚ responseséPi»ÚUNKNOWNÚIdlezRequest-startedz Request-sentédéeéféÈéÉéÊéËéÌéÍéÎéÏéâé,é-é.é/é0é1é3éé‘é’é“é”é•é–é—é˜é™éšé›éœééžéŸé é¡i¦i§i¨iªé¬é­é¯éôéõéöé÷éøéùiûiþéÿÚContinuezSwitching ProtocolsÚOKÚCreatedÚAcceptedzNon-Authoritative Informationz No Contentz Reset ContentzPartial ContentzMultiple ChoiceszMoved PermanentlyÚFoundz See Otherz Not Modifiedz Use Proxyz(Unused)zTemporary Redirectz Bad RequestÚ UnauthorizedzPayment RequiredÚ Forbiddenz Not FoundzMethod Not AllowedzNot AcceptablezProxy Authentication RequiredzRequest TimeoutÚConflictÚGonezLength RequiredzPrecondition FailedzRequest Entity Too LargezRequest-URI Too LongzUnsupported Media TypezRequested Range Not SatisfiablezExpectation FailedzPrecondition RequiredzToo Many RequestszRequest Header Fields Too LargezInternal Server ErrorzNot Implementedz Bad GatewayzService UnavailablezGateway TimeoutzHTTP Version Not SupportedzNetwork Authentication Required)-r$r%r'r(r)r*r+r,r-r0r1r2r3r4r5i2r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRiic@seZdZdd„ZdS)Ú HTTPMessagecCsj| ¡d}t|ƒ}g}d}| ¡D]@}|d|… ¡|krBd}n|dd… ¡sVd}|r$| |¡q$|S)aºFind all header lines matching a given header name. Look through the list of headers and find all lines matching a given header name (and their continuation lines). A list of the lines is returned, without interpretation. If the header does not occur, an empty list is returned. If the header occurs multiple times, all occurrences are returned. Case is not important in the header name. ú:rNé)ÚlowerÚlenÚkeysÚisspaceÚappend)ÚselfÚnameÚnÚlstÚhitÚline©rjúw/private/var/folders/s6/9n5zrl012gv99k63s4q6ccsd4s6mqz/T/pip-target-f5cq3f2q/lib/python/future/backports/http/client.pyÚgetallmatchingheadersðs   z!HTTPMessage.getallmatchingheadersN)Ú__name__Ú __module__Ú __qualname__rlrjrjrjrkr\ésr\cCszg}| td¡}t|ƒtkr&tdƒ‚| |¡t|ƒtkrHtdtƒ‚|dvrqTqtdƒ |¡  d¡}t j |d  |¡S)aGParses only RFC2822 headers from a file pointer. email Parser wants to see strings rather than bytes. But a TextIOWrapper around self.rfile would buffer too many bytes from the stream, bytes which we later need to read as bytes. So we read the correct bytes here, as bytes, for email Parser to parse. r^ú header linezgot more than %d headers©ó ó órtú iso-8859-1)Ú_class) ÚreadlineÚ_MAXLINEr`Ú LineTooLongrcÚ _MAXHEADERSrrÚjoinÚdecodeÚ email_parserÚParserÚparsestr)ÚfprvÚheadersriÚhstringrjrjrkÚ parse_headerss     rƒcsêeZdZdeddfdd„Zdd„Zdd„Zd d „Zd d „Z‡fd d„Z ‡fdd„Z dd„Z dd„Z d3‡fdd„ Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd4d'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Z‡ZS)5rrNcCsh| d¡|_||_|tur(t dtd¡||_d|_|_ t |_ t |_ t |_ t |_t |_t |_t |_dS)NÚrbúithe 'strict' argument isn't supported anymore; http.client now always assumes HTTP/1.x compliant servers.é)Úmakefiler€Ú debuglevelÚ_strict_sentinelÚwarningsÚwarnÚDeprecationWarningÚ_methodrÚmsgÚ_UNKNOWNÚversionÚstatusÚreasonÚchunkedÚ chunk_leftÚlengthÚ will_close)rdÚsockrˆÚstrictÚmethodÚurlrjrjrkÚ__init__*s þ zHTTPResponse.__init__c Cst|j td¡dƒ}t|ƒtkr*tdƒ‚|jdkrBtdt|ƒƒ|sNt |ƒ‚z|  dd¡\}}}WnBt y¦z|  dd¡\}}d}Wnt y d}Yn0Yn0|  d¡sÂ|  ¡t |ƒ‚z$t|ƒ}|d ksÜ|d krät |ƒ‚Wnt yt |ƒ‚Yn0|||fS) Nr^ruz status linerzreply:r†ÚzHTTP/r$iç)rr€rwrxr`ryrˆÚprintÚreprrÚsplitÚ ValueErrorÚ startswithÚ _close_connr)rdrirr‘r’rjrjrkÚ _read_statusLs2      zHTTPResponse._read_statuscCsú|jdurdS| ¡\}}}|tkr&qp|j td¡}t|ƒtkrJtdƒ‚| ¡}|sXq|j dkr&t d|ƒq&q||_ |_ | ¡|_ |dvr–d|_n| d¡r¨d|_nt|ƒ‚t|jƒ|_|_|j dkræ|jD]}t d|d d qÒ|j d ¡}|r| ¡d krd |_d|_nd|_| ¡|_d|_|j d¡}|j d ¡}|rŽ|jsŽzt|ƒ|_Wntyxd|_Yn0|jdkr”d|_nd|_|tksÎ|tksÎd|krÀdksÎn|jdkrÔd|_|jsö|jsö|jduröd |_dS)Nr^rprzheader:)zHTTP/1.0zHTTP/0.9é zHTTP/1.é ú )Úendztransfer-encodingr“TFúcontent-lengthr$r'ÚHEAD)rr£ÚCONTINUEr€rwrxr`ryÚstriprˆrÚcoder‘r’rr¡rrƒrŽÚgetr_r“r”Ú _check_closer–r•rr Ú NO_CONTENTÚ NOT_MODIFIEDr)rdrr‘r’ÚskipÚhdrÚtr_encr•rjrjrkÚbeginlsn              ÿ ÿ þÿþzHTTPResponse.begincCs‚|j d¡}|jdkr:|j d¡}|r6d| ¡vr6dSdS|j d¡rJdS|r^d| ¡vr^dS|j d¡}|r~d| ¡vr~dSdS)NÚ connectionr¥ÚcloseTFz keep-alivezproxy-connection)rr­rr_)rdÚconnÚpconnrjrjrkr®¼s     zHTTPResponse._check_closecCs|j}d|_| ¡dS©N)r€r¶)rdr€rjrjrkr¢ÚszHTTPResponse._close_conncstƒ ¡|jr| ¡dSr¹)r r¶r€r¢©rd©Ú __class__rjrkr¶ßs zHTTPResponse.closecstƒ ¡|jr|j ¡dSr¹)r Úflushr€rºr»rjrkr½és zHTTPResponse.flushcCsdS)NTrjrºrjrjrkÚreadableîszHTTPResponse.readablecCs |jduS)z!True if the connection is closed.N)r€rºrjrjrkÚisclosedószHTTPResponse.isclosedcs´|jdurtdƒS|jdkr,| ¡tdƒS|durHttt|ƒ |¡ƒS|jrV| ¡S|j durl|j ¡}n4z|  |j ¡}Wnt y˜| ¡‚Yn0d|_ | ¡t|ƒSdS)Nrtr©r) r€rrr¢r rÚreadr“Ú_readall_chunkedr•Ú _safe_readr)rdÚamtÚsr»rjrkrÀýs&     zHTTPResponse.readcCsÐ|jdurdS|jdkr$| ¡dS|jr4| |¡S|jdur^t|ƒ|jkr^t|ƒd|j…}trˆ|j  t|ƒ¡}t|ƒ}||d|…<n |j  |¡}|s¦|r¦| ¡n&|jdurÌ|j|8_|jsÌ| ¡|S)Nrr©) r€rr¢r“Ú_readinto_chunkedr•r`Ú memoryviewr rÀÚreadinto)rdÚbÚdatarfrjrjrkrÇs,       zHTTPResponse.readintocCsp|j td¡}t|ƒtkr$tdƒ‚| d¡}|dkrB|d|…}z t|dƒWStyj| ¡‚Yn0dS)Nr^z chunk sizeó;ré) r€rwrxr`ryÚfindrr r¢)rdriÚirjrjrkÚ_read_next_chunk_sizeAs     z"HTTPResponse._read_next_chunk_sizecCs:|j td¡}t|ƒtkr$tdƒ‚|s*q6|dvrq6qdS)Nr^z trailer linerq)r€rwrxr`ry©rdrirjrjrkÚ_read_and_discard_trailerQs z&HTTPResponse._read_and_discard_trailercCsœ|jtksJ‚|j}g}|dur^z| ¡}|dkr6Wq~Wn$ty\ttdƒ |¡ƒ‚Yn0| |  |¡¡|  d¡d}q|  ¡|  ¡tdƒ |¡S)Nrrtr†) r“rr”rÎr rrr{rcrÂrÐr¢)rdr”ÚvaluerjrjrkrÁ_s   zHTTPResponse._readall_chunkedcCs |jtksJ‚|j}d}t|ƒ}|durhz| ¡}|dkr>WqøWn&tyftt|d|…ƒƒ‚Yn0t|ƒ|kr|  |¡}|||_||St|ƒ|kr¾|  |¡}|  d¡d|_||S|d|…}|  |¡}||d…}||7}|  d¡d}q |  ¡|  ¡|S)Nrr†) r“rr”rÆrÎr rrr`Ú_safe_readintorÂrÐr¢)rdrÈr”Ú total_bytesÚmvbrfÚtemp_mvbrjrjrkrÅxs:           zHTTPResponse._readinto_chunkedcCs\g}|dkrN|j t|tƒ¡}|s6ttdƒ |¡|ƒ‚| |¡|t|ƒ8}qtdƒ |¡S)aVRead the number of bytes requested, compensating for partial reads. Normally, we have a blocking socket, but a read() can be interrupted by a signal (resulting in a partial read). Note that we cannot distinguish between EOF and an interrupt when zero bytes have been read. IncompleteRead() will be raised in this situation. This function should be used when bytes "should" be present for reading. If the bytes are truly not available (due to EOF), then the IncompleteRead exception can be used to detect the problem. rrt) r€rÀÚminÚ MAXAMOUNTrrr{rcr`)rdrÃrÄÚchunkrjrjrkr¡s zHTTPResponse._safe_readcCsÖd}t|ƒ}|t|ƒkrÒtt|ƒkrh|dt…}trZ|j t|ƒ¡}t|ƒ}||d|…<qž|j |¡}n6tr’|j t|ƒ¡}t|ƒ}||d|…<n |j |¡}|s¼tt|d|…ƒt|ƒƒ‚||d…}||7}q |S)z2Same as _safe_read, but for reading into a buffer.rN) rÆr`r×r r€rÀrÇrr)rdrÈrÓrÔrÕrÉrfrjrjrkrÒ¸s(      zHTTPResponse._safe_readintocCs |j ¡Sr¹)r€ÚfilenorºrjrjrkrÙÒszHTTPResponse.filenocCsF|jdurtƒ‚|j |¡p|}t|tƒs4t|dƒs8|Sd |¡SdS)NÚ__iter__z, )rrÚget_allÚ isinstancerÚhasattrr{)rdreÚdefaultrrjrjrkÚ getheaderÕs  zHTTPResponse.getheadercCs|jdurtƒ‚t|j ¡ƒS)z&Return list of (header, value) tuples.N)rrÚlistÚitemsrºrjrjrkÚ getheadersÞs zHTTPResponse.getheaderscCs|Sr¹rjrºrjrjrkrÚæszHTTPResponse.__iter__cCs|jSr¹)rrºrjrjrkÚinfoëszHTTPResponse.infocCs|jSr¹)ršrºrjrjrkÚgeturlîszHTTPResponse.geturlcCs|jSr¹)r‘rºrjrjrkÚgetcodeñszHTTPResponse.getcode)N)N)rmrnror‰r›r£r´r®r¢r¶r½r¾r¿rÀrÇrÎrÐrÁrÅrÂrÒrÙrßrârÚrãräråÚ __classcell__rjrjr»rkr!s0 " P  %) rc@sÆeZdZdZdZeZeZdZ dZ de e j dfdd„Zd(dd „Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zd)dd„Zd*dd„Zdd„Zd+dd„Zdifd d!„Zd"d#„Zd$d%„Zd&d'„ZdS),rr¥zHTTP/1.1r^rNcCsb|turt dtd¡||_||_d|_g|_d|_t |_ d|_ d|_ d|_ i|_| ||¡dS)Nr…r†)r‰rŠr‹rŒÚtimeoutÚsource_addressr—Ú_bufferÚ_HTTPConnection__responseÚ_CS_IDLEÚ_HTTPConnection__staterÚ _tunnel_hostÚ _tunnel_portÚ_tunnel_headersÚ _set_hostport)rdÚhostÚportr˜rçrèrjrjrkr›þsþzHTTPConnection.__init__cCs&||_||_|r||_n |j ¡dS)zº Sets up the host and the port for the HTTP CONNECT Tunnelling. The headers argument should be a mapping of extra HTTP headers to send with the CONNECT request. N)rírîrïÚclear)rdrñròrrjrjrkÚ set_tunnels zHTTPConnection.set_tunnelcCsÐ|durÀ| d¡}| d¡}||kr’zt||dd…ƒ}WnFty‚||dd…dkrf|j}ntd||dd…ƒ‚Yn0|d|…}n|j}|rÀ|ddkrÀ|ddkrÀ|dd…}||_||_dS) Nr]ú]r^rœznonnumeric port: '%s'rú[éÿÿÿÿ)Úrfindrr Ú default_portrrñrò)rdrñròrÍÚjrjrjrkrðs     zHTTPConnection._set_hostportcCs ||_dSr¹)rˆ)rdÚlevelrjrjrkÚset_debuglevel2szHTTPConnection.set_debuglevelc Csö| |j|j¡d|j|jf}| d¡}| |¡|j ¡D](\}}d||f}| d¡}| |¡q>| t dƒ¡|j |j |j d}|  ¡\}} } | dkr¼| ¡t d| |  ¡f¡‚|j td ¡} t| ƒtkràtd ƒ‚| sæqò| d vr¼qòq¼dS) NzCONNECT %s:%d HTTP/1.0 Úasciiz%s: %s úlatin-1rr©r™r'zTunnel connection failed: %d %sr^rprq)rðrírîrñròÚencodeÚsendrïrárÚresponse_classr—rr£r¶Úsocketrr«r€rwrxr`ry) rdZ connect_strZ connect_bytesÚheaderrÑZ header_strÚ header_bytesÚresponserr¬r rirjrjrkÚ_tunnel5s.     ÿ zHTTPConnection._tunnelcCs,t|j|jf|j|jƒ|_|jr(| ¡dS)z3Connect to the host and port specified in __init__.N)Úsocket_create_connectionrñròrçrèr—rírrºrjrjrkÚconnectQs  ÿzHTTPConnection.connectcCs6|jr|j ¡d|_|jr,|j ¡d|_t|_dS)z(Close the connection to the HTTP server.N)r—r¶rêrërìrºrjrjrkr¶Xs  zHTTPConnection.closecCs2|jdur |jr| ¡ntƒ‚|jdkr8tdt|ƒƒd}t|dƒrÒt|t ƒsÒ|jdkrbtdƒd}z |j }Wnt y‚Yn 0d|vr¢d }|jdkr¢td ƒ|  |¡}|s²qÎ|rÀ|  d ¡}|j |¡q¢dSz|j |¡WnJty,t|tƒr|D]}|j |¡qntd t|ƒƒ‚Yn0dS) z¿Send `data' to the server. ``data`` can be a string object, a bytes object, an array object, a file-like object that supports a .read() method, or an iterable object. Nrzsend:i rÀzsendIng a read()ableFrÈTzencoding file using iso-8859-1ruz9data should be a bytes-like object or an iterable, got %r)r—Ú auto_openr rrˆrržrÝrÜrÚmodeÚAttributeErrorrÀrÚsendallÚ TypeErrorrÚtype)rdrÉÚ blocksizerr Ú datablockÚdrjrjrkrbsF          ÿzHTTPConnection.sendcCs|j |¡dS)zuAdd a line of output to the current request buffer. Assumes that the line does *not* end with \r\n. N)rérc)rdrÄrjrjrkÚ_output”szHTTPConnection._outputcCsj|j tdƒtdƒf¡tdƒ |j¡}|jdd…=t|tƒrJ||7}d}| |¡|durf| |¡dS)z¸Send the currently buffered request and clear the buffer. Appends an extra \r\n to the buffer. A message_body may be specified, to be appended to the request. rtrrN)réÚextendrr{rÜr)rdÚ message_bodyrŽrjrjrkÚ _send_output›s   zHTTPConnection._send_outputc Csv|jr|j ¡rd|_|jtkr(t|_n t|jƒ‚||_|s@d}d|||jf}| |  d¡¡|j dkrr|s^d}|  d¡r’t |ƒ\}}}}}|rÐz|  d¡}Wnt yÀ|  d¡}Yn0| d |¡nŽz|j  d¡} Wnt yþ|j  d¡} Yn0|j d ¡d kr"td | d ƒ} |j|jkr>| d | ¡n |  d¡} | d d| |jf¡|sr| dd¡ndS)a`Send a request to the server. `method' specifies an HTTP request method, e.g. 'GET'. `url' specifies the object being requested, e.g. '/index.html'. `skip_host' if True does not add automatically a 'Host:' header `skip_accept_encoding' if True does not add automatically an 'Accept-Encoding:' header Nú/z%s %s %srýr¥rœÚhttpÚidnaÚHostr]ró[ó]z%s:%szAccept-EncodingÚidentity)rêr¿rìrëÚ_CS_REQ_STARTEDrrÚ _http_vsn_strrrÚ _http_vsnr¡rÚUnicodeEncodeErrorÚ putheaderrñrÌrròrùr|) rdr™ršÚ skip_hostÚskip_accept_encodingÚrequestÚnetlocÚnilÚ netloc_encÚhost_encrjrjrkÚ putrequest°sD          zHTTPConnection.putrequestcGs |jtkrtƒ‚t|dƒr$| d¡}t|ƒ}t|ƒD]>\}}t|dƒrV| d¡||<q4t|tƒr4t |ƒ d¡||<q4t dƒ  |¡}|t dƒ|}|  |¡dS)zkSend a request header line to the server. For example: h.putheader('Accept', 'text/html') rrýrþs s: N) rìrrrÝrràÚ enumeraterÜrrrr{r)rdrÚvaluesrÍÚ one_valuerÑrjrjrkr"$s     zHTTPConnection.putheadercCs&|jtkrt|_ntƒ‚| |¡dS)a‰Indicate that the last header line has been sent to the server. This method sends the request to the server. The optional message_body argument can be used to pass a message body associated with the request. The message body will be sent in the same packet as the message headers if it is a string, otherwise it is sent as a separate packet. N)rìrÚ _CS_REQ_SENTrr)rdrrjrjrkÚ endheaders8s zHTTPConnection.endheaderscCs| ||||¡dS)z&Send a complete request to the server.N)Ú _send_request)rdr™ršÚbodyrrjrjrkr%GszHTTPConnection.requestc Cs”d}ztt|ƒƒ}Wnftyz}zNztt | ¡¡jƒ}Wn(ttfyd|j dkr`t dƒYn0WYd}~n d}~00|dur|  d|¡dS)Nrz Cannot stat!!zContent-Length) rr`rÚosÚfstatrÙÚst_sizer ÚOSErrorrˆrr")rdr1ZthelenÚterjrjrkÚ_set_content_lengthKs.z"HTTPConnection._set_content_lengthc Cs¦t dd„|Dƒ¡}i}d|vr(d|d<d|vr8d|d<|j||fi|¤Ž|durfd|vrf| |¡| ¡D]\}}| ||¡qnt|tƒr˜| d ¡}|  |¡dS) NcSsg|] }| ¡‘qSrj)r_)Ú.0ÚkrjrjrkÚ ^rtz0HTTPConnection._send_request..rñr^r#zaccept-encodingr$r¨ru) ÚdictÚfromkeysr*r7rár"rÜrrr/) rdr™ršr1rÚ header_namesÚskipsr²rÑrjrjrkr0\s   zHTTPConnection._send_requestcCsš|jr|j ¡rd|_|jtks&|jr0t|jƒ‚|jdkrR|j|j|j|jd}n|j|j|jd}|  ¡|j t kszJ‚t |_|j r|  ¡n||_|S)a/Get the response from the server. If the HTTPConnection is in the correct state, returns an instance of HTTPResponse or of whatever object is returned by class the response_class variable. If a request has not been sent or if a previous response has not be handled, ResponseNotReady is raised. If the HTTP response indicates that the connection should be closed, then it will be closed before the response is returned. When the connection is closed, the underlying socket is closed. Nrrÿ)rêr¿rìr.rrˆrr—rr´r–rrër¶)rdrrjrjrkÚ getresponseqs    ÿ zHTTPConnection.getresponse)NN)N)rr)N)rmrnror rrrÚ HTTP_PORTrùr rˆr‰rÚ_GLOBAL_DEFAULT_TIMEOUTr›rôrðrürr r¶rrrr*r"r/r%r7r0r?rjrjrjrkrôs2ÿ   2  t r)Ú SSLContextcs<eZdZdZeZdddeejdf‡fdd„ Z dd„Z ‡Z S)ÚHTTPSConnectionz(This class allows communication via SSL.Nc  sÎd|vr|d} |d=nd} d|vr4|d} |d=nd} tt|ƒ |||||¡||_||_| dur€t tj¡} | jtj O_| j tj k} | durš| } n| rª| sªt dƒ‚|s²|r¾|   ||¡| |_| |_dS)NÚcheck_hostnameÚcontextzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)r rCr›Úkey_fileÚ cert_fileÚsslrBÚPROTOCOL_SSLv23ÚoptionsÚ OP_NO_SSLv2Ú verify_modeÚ CERT_NONEr Úload_cert_chainÚ_contextÚ_check_hostname) rdrñròrFrGr˜rçrèZ _3to2kwargsrDrEÚ will_verifyr»rjrkr›µs*ÿ   zHTTPSConnection.__init__cCsžt|j|jf|j|jƒ}|jr,||_| ¡tj r8|jnd}|j j ||d|_z|j rjt  |j ¡|j¡Wn,ty˜|j tj¡|j ¡‚Yn0dS)z(Connect to a host on a given (SSL) port.N)Úserver_hostname)rrñròrçrèrír—rrHÚHAS_SNIrOÚ wrap_socketrPÚmatch_hostnameÚ getpeercertÚ ExceptionÚshutdownrÚ SHUT_RDWRr¶)rdr—rRrjrjrkr Ïs" ÿÿ  zHTTPSConnection.connect) rmrnroÚ__doc__Ú HTTPS_PORTrùr‰rrAr›r rærjrjr»rkrC®sþrCc@s eZdZdS)rN©rmrnrorjrjrjrkrsrc@s eZdZdS)rNr\rjrjrjrkr src@s eZdZdS)rNr\rjrjrjrkr src@seZdZdd„ZdS)rcCs|f|_||_dSr¹)Úargsr)rdrrjrjrkr›szUnknownProtocol.__init__N©rmrnror›rjrjrjrkrsrc@s eZdZdS)rNr\rjrjrjrkrsrc@s eZdZdS)rNr\rjrjrjrkrsrc@s&eZdZddd„Zdd„Zdd„ZdS) rNcCs|f|_||_||_dSr¹)r]ÚpartialÚexpected)rdr_r`rjrjrkr›szIncompleteRead.__init__cCs,|jdurd|j}nd}dt|jƒ|fS)Nz, %i more expectedrœzIncompleteRead(%i bytes read%s))r`r`r_)rdÚerjrjrkÚ__repr__ s  zIncompleteRead.__repr__cCst|ƒSr¹)ržrºrjrjrkÚ__str__&szIncompleteRead.__str__)N)rmrnror›rbrcrjrjrjrkrs rc@s eZdZdS)rNr\rjrjrjrkr)src@s eZdZdS)rNr\rjrjrjrkr,src@s eZdZdS)rNr\rjrjrjrkr/src@s eZdZdS)rNr\rjrjrjrkr2src@seZdZdd„ZdS)rcCs|s t|ƒ}|f|_||_dSr¹)ržr]rirÏrjrjrkr›6szBadStatusLine.__init__Nr^rjrjrjrkr5src@seZdZdd„ZdS)rycCst |dt|f¡dS)Nz&got more than %d bytes when reading %s)rr›rx)rdÚ line_typerjrjrkr›=sÿzLineTooLong.__init__Nr^rjrjrjrkry<sry){rZÚ __future__rrrrZfuture.builtinsrrrr Z future.utilsr Zfuture.backports.emailr r}r Z email_messageZfuture.backports.miscr rÚior2rZfuture.backports.urllib.parserrŠrÚ collectionsrÚcollections.abcÚ__all__r@r[rrërr.rªÚSWITCHING_PROTOCOLSÚ PROCESSINGrTÚCREATEDÚACCEPTEDÚNON_AUTHORITATIVE_INFORMATIONr¯Ú RESET_CONTENTÚPARTIAL_CONTENTÚ MULTI_STATUSÚIM_USEDÚMULTIPLE_CHOICESÚMOVED_PERMANENTLYÚFOUNDÚ SEE_OTHERr°Ú USE_PROXYÚTEMPORARY_REDIRECTÚ BAD_REQUESTÚ UNAUTHORIZEDÚPAYMENT_REQUIREDÚ FORBIDDENÚ NOT_FOUNDÚMETHOD_NOT_ALLOWEDÚNOT_ACCEPTABLEÚPROXY_AUTHENTICATION_REQUIREDÚREQUEST_TIMEOUTÚCONFLICTÚGONEÚLENGTH_REQUIREDÚPRECONDITION_FAILEDÚREQUEST_ENTITY_TOO_LARGEÚREQUEST_URI_TOO_LONGÚUNSUPPORTED_MEDIA_TYPEÚREQUESTED_RANGE_NOT_SATISFIABLEÚEXPECTATION_FAILEDÚUNPROCESSABLE_ENTITYÚLOCKEDÚFAILED_DEPENDENCYÚUPGRADE_REQUIREDÚPRECONDITION_REQUIREDÚTOO_MANY_REQUESTSÚREQUEST_HEADER_FIELDS_TOO_LARGEÚINTERNAL_SERVER_ERRORÚNOT_IMPLEMENTEDÚ BAD_GATEWAYÚSERVICE_UNAVAILABLEÚGATEWAY_TIMEOUTÚHTTP_VERSION_NOT_SUPPORTEDÚINSUFFICIENT_STORAGEÚ NOT_EXTENDEDÚNETWORK_AUTHENTICATION_REQUIREDr r×rxrzÚMessager\rƒÚobjectr‰Ú RawIOBaserrrHrBÚ ImportErrorrCrcrWrrrrrrrrrrrrryrrjrjrjrkÚs8F       Ï5 V76 !