a 8dg@s>ddlZddlZddlZddlZddlZddlZddlZddl m Z gdZ dZ dZ dZdZdZd Zeejjd d ejjDZd Zd ZedjZedjZedZedZ hdZ!d>ddZ"Gdddej#j$Z%ddZ&e%fddZ'Gdddej(Z)GdddZ*z ddl+Z+Wne,y8Yn0Gd d!d!e*Z-e .d!Gd"d#d#e/Z0Gd$d%d%e0Z1Gd&d'd'e0Z2Gd(d)d)e0Z3Gd*d+d+e0Z4Gd,d-d-e0Z5Gd.d/d/e0Z6Gd0d1d1e0Z7Gd2d3d3e7Z8Gd4d5d5e7Z9Gd6d7d7e7Z:Gd8d9d9e0Z;Gd:d;d;e0Ze0Z?dS)?N)urlsplit) HTTPResponseHTTPConnection HTTPException NotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReady BadStatusLine LineTooLongRemoteDisconnectederror responsesPiZUNKNOWNZIdlezRequest-startedz Request-sentcCsi|] }||jqS)phrase).0vrr'/usr/local/lib/python3.9/http/client.py jrids[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]z[-]>PUTZPOSTZPATCHdatac Csjz |dWStyd}z@t|j|j|j|jd|||j|j|fdWYd}~n d}~00dS)Nlatin-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_encodes r*c@seZdZddZdS) HTTPMessagecCsj|d}t|}g}d}|D]@}|d||krBd}n|ddsVd}|r$||q$|S)N:r)lowerlenkeysisspaceappend)selfr(nZlstZhitlinerrrgetallmatchingheaderss   z!HTTPMessage.getallmatchingheadersN)__name__ __module__ __qualname__r6rrrrr+sr+cCsXg}|td}t|tkr&td||t|tkrHtdt|dvrqTq|S)Nr- header linezgot more than %d headers  r)readline_MAXLINEr/rr2 _MAXHEADERSr)fpheadersr5rrr _read_headerss    rCcCs,t|}d|d}tjj|d|S)Nr iso-8859-1)_class)rCjoindecodeemailparserZParserZparsestr)rArErBZhstringrrr parse_headerss rJcseZdZd@ddZddZddZd d Zd d Zfd dZfddZ ddZ ddZ dAddZ ddZ ddZddZddZdd Zd!d"Zd#d$Zd%d&ZdBd(d)ZdCd*d+ZdDfd,d- Zd.d/Zd0d1Zd2d3ZdEd4d5Zd6d7Zd8d9Zd:d;Zdd?Z Z!S)FrrNcCsR|d|_||_||_d|_|_t|_t|_t|_ t|_ t|_ t|_ t|_ dS)Nrb)makefilerA debuglevel_methodrBmsg_UNKNOWNversionstatusreasonchunked chunk_leftlength will_close)r3sockrMmethodurlrrr__init__s  zHTTPResponse.__init__c Cst|jtdd}t|tkr*td|jdkrBtdt||sNt dz| dd\}}}WnBt yz| dd\}}d}Wnt yd}Yn0Yn0| d s| t|z$t|}|d ks|d krt|Wnt yt|Yn0|||fS) Nr-rDz status linerzreply:z-Remote end closed connection without responsezHTTP/ri)strrAr>r?r/rrMprintreprrsplit ValueError startswith _close_connrint)r3r5rQrRrSrrr _read_statuss2      zHTTPResponse._read_statusc Cs|jdurdS|\}}}|tkr&qHt|j}|jdkrDtd|~q||_|_| |_ |dvrnd|_ n| drd|_ nt |t|j|_|_|jdkr|jD]\}}td|d|q|jd }|r|d krd |_d|_nd |_||_d|_|jd }|r`|js`zt||_WntyJd|_Yn0|jdkrfd|_nd|_|tks|tksd|krdksn|jdkrd|_|js|js|jdurd |_dS)Nrzheaders:)zHTTP/1.0zHTTP/0.9 zHTTP/1. header:r,transfer-encodingrTTFcontent-lengthrHEAD)rBrfZCONTINUErCrArMr_coderRstriprSrQrcrrJrOitemsgetr.rTrU _check_closerWrVrerbZ NO_CONTENTZ NOT_MODIFIEDrN) r3rQrRrSZskipped_headershdrvalZtr_encrVrrrbegin5sd               zHTTPResponse.begincCsv|jd}|jdkr.|r*d|vr*dSdS|jdr>dS|rRd|vrRdS|jd}|rrd|vrrdSdS)N connectionrhcloseTFz keep-alivezproxy-connection)rBrqrQr.)r3connZpconnrrrrr}s    zHTTPResponse._check_closecCs|j}d|_|dSN)rArw)r3rArrrrdszHTTPResponse._close_conncs2ztW|jr.|n|jr,|0dSry)superrwrArdr3 __class__rrrws   zHTTPResponse.closecst|jr|jdSry)rzflushrAr{r|rrr~s zHTTPResponse.flushcCsdS)NTrr{rrrreadableszHTTPResponse.readablecCs |jduSry)rAr{rrrisclosedszHTTPResponse.isclosedcCs|jdurdS|jdkr$|dS|durRt|}||}t|d|S|jr`|S|j durv|j }n4z| |j }Wnt y|Yn0d|_ ||SdS)Nrrmr) rArNrd bytearrayreadinto memoryviewtobytesrT_readall_chunkedrVread _safe_readr )r3amtbr4srrrrs*      zHTTPResponse.readcCs|jdurdS|jdkr$|dS|jr4||S|jdur^t||jkr^t|d|j}|j|}|s||r||n&|jdur|j|8_|js||S)Nrrm) rArNrdrT_readinto_chunkedrVr/rr)r3rr4rrrrs$       zHTTPResponse.readintocCsp|jtd}t|tkr$td|d}|dkrB|d|}z t|dWStyj|Yn0dS)Nr-z chunk size;r) rAr>r?r/rfindrerbrd)r3r5irrr_read_next_chunk_sizes     z"HTTPResponse._read_next_chunk_sizecCs:|jtd}t|tkr$td|s*q6|dvrq6qdS)Nr-z trailer liner;)rAr>r?r/rr3r5rrr_read_and_discard_trailers z&HTTPResponse._read_and_discard_trailercCsj|j}|sf|dur|dz |}WntyBtdYn0|dkr`||d}||_|S)Nr\rr)rUrrrbr rrd)r3rUrrr_get_chunk_left s   zHTTPResponse._get_chunk_leftcCs`g}z6|}|durq0|||d|_qd|WStyZtd|Yn0dSNrr)rr2rrUrFr )r3valuerUrrrr8s  zHTTPResponse._readall_chunkedcCsd}t|}zv|}|dur$|WSt||krN||}|||_||WS|d|}||}||d}||7}d|_qWn&tytt|d|Yn0dS)Nr)rrr/_safe_readintorUr bytes)r3rZ total_bytesZmvbrUr4Ztemp_mvbrrrrFs"         zHTTPResponse._readinto_chunkedcCs.|j|}t||kr*t||t||Sry)rArr/r )r3rrrrrr^s  zHTTPResponse._safe_readcCs:t|}|j|}||kr6tt|d||||Sry)r/rArr r)r3rrr4rrrrjs  zHTTPResponse._safe_readintocCs|jdus|jdkrdS|jr(||S|jdurJ|dksD||jkrJ|j}|j|}|sh|rh|n|jdur|jt|8_|SNrmrr)rArNrT_read1_chunkedrVread1rdr/)r3r4resultrrrrrs    zHTTPResponse.read1cCs4|jdus|jdkrdS|jr(||S|j|S)Nrmr)rArNrT _peek_chunkedpeek)r3r4rrrrs  zHTTPResponse.peekcs|jdus|jdkrdS|jr*t|S|jdurL|dksF||jkrL|j}|j|}|sj|rj|n|jdur|jt|8_|Sr)rArNrTrzr>rVrdr/)r3limitrr|rrr>s    zHTTPResponse.readlinecCsd|}|dus|dkrdSd|kr0|ks6n|}|j|}|jt|8_|s`td|Sr)rrArrUr/r )r3r4rUrrrrrs zHTTPResponse._read1_chunkedcCsBz |}Wnty YdS0|dur.dS|j|d|S)Nr)rr rAr)r3r4rUrrrrs  zHTTPResponse._peek_chunkedcCs |jSry)rAfilenor{rrrrszHTTPResponse.filenocCsF|jdurt|j|p|}t|ts4t|ds8|Sd|SdS)N__iter__z, )rBrZget_all isinstancer^hasattrrF)r3r(defaultrBrrr getheaders zHTTPResponse.getheadercCs|jdurtt|jSry)rBrlistrpr{rrr getheaderss zHTTPResponse.getheaderscCs|Sryrr{rrrrszHTTPResponse.__iter__cCs|jSry)rBr{rrrinfoszHTTPResponse.infocCs|jSry)rZr{rrrgeturls zHTTPResponse.geturlcCs|jSry)rRr{rrrgetcodeszHTTPResponse.getcode)rNN)N)r)r)r)N)"r7r8r9r[rfrurrrdrwr~rrrrrrrrrrrrrr>rrrrrrrrr __classcell__rrr|rrs< !H  "      rc@s eZdZdZdZeZeZdZ dZ e ddZ e ddZ d ejd d fd d Zd7d dZddZddZddZddZddZddZddZddZd8d d!Zd9d"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Z d:dd.d/d0Z!d ifdd.d1d2Z"d3d4Z#d5d6Z$d S);rrhzHTTP/1.1r-rcCs t|tjSry)rio TextIOBase)streamrrr _is_textIOszHTTPConnection._is_textIOcCsd|dur|tvrdSdSt|dr*dSzt|}|jWStyLYn0t|tr`t|SdS)Nrr) upper_METHODS_EXPECTING_BODYrrnbytes TypeErrorrr^r/)bodyrYmvrrr_get_content_lengths    z"HTTPConnection._get_content_lengthN cCsn||_||_||_d|_g|_d|_t|_d|_d|_ d|_ i|_ | ||\|_ |_||j tj|_dSry)timeoutsource_address blocksizerX_buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__staterN _tunnel_host _tunnel_port_tunnel_headers _get_hostporthostport_validate_hostsocketcreate_connection_create_connection)r3rrrrrrrrr[4s zHTTPConnection.__init__cCs<|jrtd|||\|_|_|r.||_n |jdS)Nz.Can't set up tunnel for established connection)rX RuntimeErrorrrrrclear)r3rrrBrrr set_tunnelJs zHTTPConnection.set_tunnelcCs|dur|d}|d}||krzt||dd}WnFty||dddkrf|j}ntd||ddYn0|d|}n|j}|r|ddkr|ddkr|dd}||fS) Nr,]r-r]znonnumeric port: '%s'r[r)rfindrerb default_portr )r3rrrjrrrrbs    zHTTPConnection._get_hostportcCs ||_dSry)rM)r3levelrrrset_debuglevelvszHTTPConnection.set_debuglevelc Cs d|jd|jf}|g}|jD]$\}}||d|ddq&|d|d|~|j|j |j d}| \}}}|t j jkr|td |d ||jtd } t| tkrtd | sq| d vrq|jdkrtd| qdS)NsCONNECT %s:%d HTTP/1.0 asciiz:  r r<rrYzTunnel connection failed:  r-r:r;rri)rr!rrrpr2sendrFresponse_classrXrNrfhttp HTTPStatusZOKrwOSErrorrorAr>r?r/rrMr_rG) r3connectrBheaderrresponserQrnmessager5rrr_tunnelys.    zHTTPConnection._tunnelcCsB||j|jf|j|j|_|jtjtj d|j r>| dS)Nr-) rrrrrrX setsockoptr IPPROTO_TCP TCP_NODELAYrrr{rrrrs zHTTPConnection.connectcCsZt|_z4|j}|r d|_|W|j}|rVd|_|n|j}|rTd|_|0dSry)rrrXrwr)r3rXrrrrrws  zHTTPConnection.closecCs|jdur |jr|nt|jdkr8tdt|t|dr|jdkrTtd||}|rt|jdkrttd| |j }|sq|r| d}|j |qtdSz|j |WnHt yt|tjjr|D]}|j |qnt dt|Yn0dS)Nrzsend:rsendIng a read()ableencoding file using iso-8859-1rDz9data should be a bytes-like object or an iterable, got %r)rX auto_openrrrMr_r`rrrrr!sendallrr collectionsabcIterabletype)r3rr! datablockdrrrrs8         zHTTPConnection.sendcCs|j|dSry)rr2)r3rrrr_outputszHTTPConnection._outputccs^|jdkrtd||}|r2|jdkr2td||j}|sDqZ|rR|d}|Vq2dS)NrrrrD)rMr_rrrr!)r3rr!rrrr_read_readables    zHTTPConnection._read_readableFc Cs|jdd|j}|jdd=|||durt|drN||}nVz t|WnBtyz t|}Wn"tytdt |Yn0Yn0|f}|D]R}|s|j dkrt dq|r|j dkrt |dd d |d}||q|r|j dkr|d dS) N)rrr<rzAmessage_body should be a bytes-like object or an iterable, got %rrzZero length chunk ignoredrhXrrs0 )rextendrFrrrrriterrrMr_ _http_vsnr/r!)r3 message_bodyencode_chunkedrOchunkschunkrrr _send_outputs:             zHTTPConnection._send_outputc Cs|jr|jrd|_|jtkr(t|_n t|j||||_|pHd}||d|||j f}| | ||j dkr|sd}| drt|\}}}}}|rz|d}Wnty|d}Yn0|d|n|jr|j} |j} n |j} |j} z| d} Wnty0| d} Yn0| d d krNd | d } | |jkrh|d| n| d} |dd | | f|s|ddndS)N/z%s %s %srhr]rrZidnaZHostr,r[]z%s:%szAccept-Encodingidentity)rrrr_CS_REQ_STARTEDr _validate_methodrN_validate_path _http_vsn_strr_encode_requestrrcrr!r" putheaderrrrrrrrG) r3rYrZ skip_hostskip_accept_encodingrequestnetlocnilZ netloc_encrrZhost_encrrr putrequest!sP             zHTTPConnection.putrequestcCs |dS)Nr)r!)r3rrrrrszHTTPConnection._encode_requestcCs,t|}|r(td|d|ddS)Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchrbgroup)r3rYmatchrrrrs zHTTPConnection._validate_methodcCs,t|}|r(td|d|ddSNz&URL can't contain control characters. r r !_contains_disallowed_url_pchar_rer r r )r3rZrrrrrs   zHTTPConnection._validate_pathcCs,t|}|r(td|d|ddSrr)r3rrrrrrs   zHTTPConnection._validate_hostcGs|jtkrtt|dr$|d}t|s:td|ft|}t|D]\\}}t|drl|d||<nt |t rt |d||<t ||rJtd||fqJd |}|d|}||dS)Nr!rzInvalid header name %rr zInvalid header value %rs s: )rrrrr!_is_legal_header_namerbr enumeraterrer^_is_illegal_header_valuerFr)r3rvaluesrZ one_valuerrrrrs"        zHTTPConnection.putheaderrcCs*|jtkrt|_nt|j||ddS)Nr)rr _CS_REQ_SENTrr)r3rrrrr endheaderss zHTTPConnection.endheaderscCs||||||dSry) _send_request)r3rYrZrrBrrrrrszHTTPConnection.requestc Cstdd|D}i}d|vr&d|d<d|vr6d|d<|j||fi|d|vrd |vrd }|||}|dur|dur|jd krtd |d }|ddq|dt|nd }|D]\} } || | qt|trt |d}|j ||ddS)Ncss|]}|VqdSry)r.)rkrrr rz/HTTPConnection._send_request..rr-rzaccept-encodingrrkrjFrzUnable to determine size of %rTzTransfer-EncodingrTzContent-Lengthrr) frozensetrrrMr_rr^rprr*r) r3rYrZrrBrZ header_namesZskipsZcontent_lengthrsrrrrrs0      zHTTPConnection._send_requestcCs|jr|jrd|_|jtks&|jr0t|j|jdkrR|j|j|j|jd}n|j|j|jd}zLz | Wnt y| Yn0t |_|j r| n||_|WS| Yn0dS)Nrr)rrrrrrMrrXrNruConnectionErrorrwrrW)r3rrrr getresponses.      zHTTPConnection.getresponse)NN)NF)FF)N)%r7r8r9rrrr HTTP_PORTrrrM staticmethodrrr_GLOBAL_DEFAULT_TIMEOUTr[rrrrrrwrrrrrrrrrrrrrrrrrrrsJ      & 6    .rcsDeZdZeZdddejdfddddfdd ZfddZZ S)HTTPSConnectionNr)contextcheck_hostnamerc stt|j||||| d|dus2|dus2|durHddl} | dtd||_||_|durtt }|j durtd|_ |j tj k} |dur|j }|r| std|s|r||||j durd|_ ||_|dur||j_ dS)N)rrzTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.r\TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rzr"r[warningswarnDeprecationWarningkey_file cert_filesslZ_create_default_https_contextZpost_handshake_authZ verify_modeZ CERT_NONEr$rbZload_cert_chain_context) r3rrr(r)rrr#r$rr%Z will_verifyr|rrr[ds:    zHTTPSConnection.__init__cs6t|jr|j}n|j}|jj|j|d|_dS)N)server_hostname)rzrrrr+Z wrap_socketrX)r3r,r|rrrs  zHTTPSConnection.connect) r7r8r9 HTTPS_PORTrrr!r[rrrrr|rr"]s$r"c@s eZdZdS)rNr7r8r9rrrrrsrc@s eZdZdS)rNr.rrrrrsrc@s eZdZdS)r Nr.rrrrr sr c@seZdZddZdS)rcCs|f|_||_dSry)argsrQ)r3rQrrrr[szUnknownProtocol.__init__Nr7r8r9r[rrrrrsrc@s eZdZdS)rNr.rrrrrsrc@s eZdZdS)r Nr.rrrrr sr c@s$eZdZdddZddZejZdS)r NcCs|f|_||_||_dSry)r/partialexpected)r3r1r2rrrr[szIncompleteRead.__init__cCs2|jdurd|j}nd}d|jjt|j|fS)Nz, %i more expectedr]z%s(%i bytes read%s))r2r}r7r/r1)r3errr__repr__s    zIncompleteRead.__repr__)N)r7r8r9r[r4r$__str__rrrrr s r c@s eZdZdS)r Nr.rrrrr sr c@s eZdZdS)r Nr.rrrrr sr c@s eZdZdS)rNr.rrrrrsrc@s eZdZdS)rNr.rrrrrsrc@seZdZddZdS)rcCs|s t|}|f|_||_dSry)r`r/r5rrrrr[szBadStatusLine.__init__Nr0rrrrrsrc@seZdZddZdS)rcCst|dt|fdS)Nz&got more than %d bytes when reading %s)rr[r?)r3Z line_typerrrr[szLineTooLong.__init__Nr0rrrrrsrc@seZdZddZdS)rcOs(t|dtj|g|Ri|dS)Nr])rr[ConnectionResetError)r3poskwrrrr[s zRemoteDisconnected.__init__Nr0rrrrrsr)r)@Z email.parserrHZ email.messagerrrercollections.abcr urllib.parser__all__rr-rPrrrglobalsupdater __members__rrr?r@compile fullmatchrr rrr rr*rZMessager+rCrJBufferedIOBaserrr* ImportErrorr"r2 Exceptionrrr rrr r r r rrrrr6rrrrrrGst       X 8