K iclddlmZddlmZmZddlmZmZmZm Z m Z m Z ddlm Z ddl mZmZddlmZddlmZmZddlmZmZmZmZdd lmZdd lmZdd lZdd lZdd l Z dd l!Z!dd l"Z"dd l#Z#dd l$Z$dd l%Z%dd l&Z&dd l'm(Z(dd l)Z*dd l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1ddl2m3Z3dd l+Z+e+jhr ddl+m5Z5m6Z6m7Z7GddeZ8GddeZ9GddeZ:Gdde jvZ|j|=|jyrY)rTrj)r/rls r1rsz$SimpleAsyncHTTPClient._release_fetchs KK  r3c||jvr>|j|\}}}||jj||j|=yyrY)rUrdremove_timeout)r/rlr[r\rms r1rrz%SimpleAsyncHTTPClient._remove_timeoutsL $,, 04 S0A -GX~) ++N; S! r3infocD|j|\}}}|jj|||f|rd|nd}t|dt ||j j |jz }|j j|||j|=y)zTimeout callback of request. Construct a timeout HTTPResponse when a timeout occurs. :arg object key: A simple object to mark the request. :info string key: More detailed timeout information. Timeout r5r))error request_timeN) rUrSremoverr$rdrf start_time add_callback)r/rlr~r[r\rm error_messagetimeout_responses r1riz!SimpleAsyncHTTPClient._on_timeouts-1LL,=)> 323-1(4&)y '  "=1**,w/A/AA   !!(,<= LL r3) Ni@NNNNr&NrY)r9r:r;r<intrrr=rrrPrZr rrrorjtyperxrtr^rsrrrir>r?s@r1rFrFOs_$P59('+-1)-'+$<$<#4S>2$< $< 8$ $< 4S>* $<"#$< }$< $GETPUTHEADPOSTPATCHDELETEOPTIONSclientr[ruNryrIrWrLrMr&c tj|_|jj|_tj|_||_||_||_||_ ||_ ||_ ||_ ||_ d|_d|_g|_d|_d|_d|_tjj)t+j,|j/dy)Nc"|jSrYresult)fs r1z*_HTTPConnection.__init__..s qxxzr3)rcurrentrdrfrstart_wall_timerr[ruryrIrWrLrMcodeheaderschunks _decompressor_timeout _sockaddr add_futurerconvert_yieldedrun) r/rr[ruryrIrWrLrMs r1r-z_HTTPConnection.__init__s~~' ,,++-#yy{  0,.$.*   ! ##    +-A r3c |K tjjt|jj |_|j jdvr"td|jj z|j j}d|vr|jd\}}}tj|\}}||j jdk(rdnd}tjd|r|dd }||_|jj d urt"j$}nt"j&}|j)|j j}d}|jj*rXt-|jj*r|jj*}n"td |jj*|jj.rK|jj0r5t3|jj.|jj0} n\|jj.r|jj.} n/|jj0r|jj0} nd } | rL|j4j7|j8| zt;j<|j>d |_ |jBjE|||||jF|d{} |jH| jKy| |_&|jLjO|jP|jS|jHy|jj0r`|j4j7|j8|jj0zt;j<|j>d|_ |jjT|jVvr8|jjXs"t[d|jjTzdD]'} t]|j| dst_d| zd|jj`vrd|jj`d<d|jj`vrd|j jvr@|j jjdd |jj`d<n-|j j|jj`d<d\} } |j jb-|j jb|j jd} } nF|jjf0|jjf} |jjhxsd} | | J|jjjdvr td|jjjdttmjntjp| | z|jj`d<|jjrr.|jjr|jj`d<nE|jj`jud dtv|jj`d<|jjXs||jjTdv}|jjxduxs|jjzdu}|r|r|r,|s*td|rd ndd!|jjTd"|jj|rd#|jj`d$<|jjx?tt|jjx|jj`d%<|jjTd&k(r1d'|jj`vrd(|jj`d'<|jjrd)|jj`d*<|j jxsd+|j jrd,|j jzndz}|j| |_Etj|jjT|d}|jj||jj`|jj|r$|jj|d{y|jd-d{y7v7"7 #t$r%|jtjsYywxYww).N)httphttpszUnsupported url scheme: %s@riPz^\[.*\]$Fz=Unrecognized IPv4 or IPv6 address for network_interface, got rzwhile connecting)af ssl_optionsrI source_ipzduring requestzunknown method %s) proxy_host proxy_portproxy_usernameproxy_passwordproxy_auth_modez%s not supported ConnectionrZHost)NN)Nbasiczunsupported auth_mode %szBasic Authorizationz User-AgentzTornado/)rrrz Body must znot zbe None for method z+ (unless allow_nonstandard_methods is true)z 100-continueExpectContent-Lengthr Content-Typez!application/x-www-form-urlencodedgzipzAccept-Encoding/?T)Nurllibparseurlsplitrr[urlparsedscheme ValueErrornetloc rpartitionr split_host_and_portrematchparsed_hostname allow_ipv6socketAF_INET AF_UNSPEC_get_ssl_optionsnetwork_interfacerr`rarcrdrerrgrhrirrWconnectrIryrZstreamset_close_callbackon_connection_closerrmethod_SUPPORTED_METHODSallow_nonstandard_methodsKeyErrorgetattrNotImplementedErrorrusernamepassword auth_username auth_password auth_modebase64 b64encodeencode_username_password user_agentgetrbody body_producerexpect_100_continuer=rbdecompress_responsepathquery_create_connection connectionRequestStartLine write_headers read_response _write_body Exception_handle_exceptionsysexc_info)r/ruserpass_hostportrrrrnrrlrr body_expected body_presentreq_path start_lines r1rz_HTTPConnection.run s^  ,,//9I9I0JKDK{{!!):: != @P@P!PQQ[[''Ff}&,&7&7&<#!V!55f=JD$|"kk00G;sxx T*Abz#'D ||&&%/^^%%// 0B0BCKI||--t||==> $ > >I$<<99< ||++ 0L0LLL00$,,2N2N--,,66--,,66 $ 8 8OOg-%%d&6&68JK!  ??22' $ 4 4# 3F""*  DK KK * *4+C+C D  """*||++ $ 8 8OOdll&B&BB%%d&6&68HI!  ##4+B+BB >>2T\\5H5HHII H4<<d3-.@3.FGG H4<<#7#775< $$\2T\\111$++,,,37;;3E3E3P3PQT3U4DLL((048;;3E3EDLL((0!+ Hh{{##/%)[[%9%94;;;O;O(++7<<55<<55;#+++<<))@$%?AWAWXX8@8$$ 99(HMD9 $$_5 ||&&59\\5L5L $$\2%%)),7?7?y5I $$\2<<99!% 3 37O O LL%%T1>||11=", $&36:DLL*>>8 $$^4||//:@ $$%67 ((/C-1[[->->t{{(((BH#55f=DO!224<<3F3FRTUJ OO ) )*dll6J6J K||//oo33D999&&t,,,UP:, )4))3<<>:; sf<L f f f /f<0Af 8f<9C,f &S>f $f%f )f<*f >f ?f f<f f f +f96f<8f99f<rc|dk(r|jj|jjS|jjrH|jj2|jj|jj t Stjtjj|jj}|jjsd|_ tj|_ |jj:|j|jj|jj ttdr#|xj tj"zc_|Sy)Nr)cafileFOP_NO_COMPRESSION)r[r validate_certca_certs client_cert client_keyrsslcreate_default_contextPurpose SERVER_AUTHcheck_hostname CERT_NONE verify_modeload_cert_chainhasattroptionsr)r/rssl_ctxs r1rz _HTTPConnection._get_ssl_optionss W ||''3||/// **LL))1LL,,4LL++3++00 '' 0E0EG<<--).&&)mm#||''3''LL,,dll.E.Es/03#8#88Nr3r~c~d|_|rd|nd}|j!|jtt|dyy)zTimeout callback of _HTTPConnection instance. Raise a `HTTPTimeoutError` when a timeout occurs. :info string key: More detailed timeout information. Nrr5)rryrr$)r/r~rs r1riz_HTTPConnection._on_timeoutsG -1(4&)y    *  " " "2="A4  +r3cv|j-|jj|jd|_yyrY)rrdr}r6s r1rrz_HTTPConnection._remove_timeouts. == $ LL ' ' 6 DM %r3rc |jdt|dtd|j|jt |j j|j}|S)NT) no_keep_aliverLrM decompress) set_nodelayr rrLrMboolr[rr)r/rrs r1rz"_HTTPConnection._create_connections`4 $   %" $ 4 4"00 @ @A   NN  r3 start_readc&K|jj0|jj|jjnQ|jj;|jj |jj}| |d{|jj |r% |jj |d{yy7F7#t$r%|jtjsYywxYwwrY) r[rrwriterfinishrrrrr)r/rfuts r1rz_HTTPConnection._write_bodys <<   ( OO ! !$,,"3"3 4 \\ ' ' 3,,,,T__-B-BCC    oo33D999 :$ -t--s||~>? sHBDC D7C CC DC +D D DDcR|j|j}d|_|yyrY)ru)r/rus r1_releasez_HTTPConnection._releases-  ,#44 $(D !   -r3responsec|j|j0|j}d|_|jj||yyrY)rryrdr)r/rrys r1 _run_callbackz_HTTPConnection._run_callbacksC     *!00N"&D  LL % %nh ? +r3typzOptional[Type[BaseException]]valuetbc |j|jt|tr$|j t d}n |j}|j t|jd||jj|jz |jt|dr|jjyt|tS)NrDr))rrrrT)ryrr isinstancer real_errorrAr!rr[rdrfrrrrrZ)r/r"r#r$s r1rz!_HTTPConnection._handle_exceptions    *  "%!23##+1/BE!,,E   LL!%!2!2!4t!F#33  tX& !!# e%67 7r3c|j:d}|jjr|jj t|y#t$r$|jt j YywxYw)NzConnection closed)ryrrrArrr)r/r%s r1rz#_HTTPConnection.on_connection_closeBsl    *)G{{  kk''' 8+G44 + ) 8&&& 7 8s A*A54A5 first_linerc`Kt|tjsJ|jjr)|j dk(r|j dd{y|j |_|j|_||_|jry|jj}|jjd|z|jjD]&\}}|jj|d|d(|jjdyy7ӭw)NdFz %s %s %s z: z ) r&r ResponseStartLiner[rrrreasonr_should_follow_redirectheader_callbackget_all)r/r)rkvs r1headers_receivedz _HTTPConnection.headers_receivedLs *h&@&@AAA << + + 30F""5) ) ) OO  ''   ' ' )  << ' ' 3 LL ( (*)D E ,,. >1 ,,s"QCt_= > LL ( ( 0 4 *sAD.D,CD.c|jjrp|jjJ|jdvxrH|jjdkDxr-|jduxr|jj dduSy)N)-./i3i4rLocationF)r[follow_redirects max_redirectsrrrr6s r1r.z'_HTTPConnection._should_follow_redirectcs << ( (<<--9 99 66=LL..2=LL,=LL$$Z0<   r3c $|jJdj|j}|jt |j d|j }|j rt|j tsJ|jJtj|j j }tjj|j j|jd|_|j jJ|j jdz |_|jd=|jdk(r|j j dk7s'|jdvrF|j j d k(r-d |_d|_d D]} |j j|=||_|j(d|_|j+|j,J|j,j/|d }|j1fd|j3y|j j4r t7}n t7|}t9||jt |dd|j|j:j=|j>z |j@||j j}|jC||j3y#t$$rYfwxYw)Nr3original_requestr8rrr7r)r5r6rr)rrzContent-EncodingzTransfer-EncodingF) raise_errorc0|jSrYr)rrys r1rz(_HTTPConnection.finish..sN188:,Fr3r-)r-rrrbuffer effective_url)"rjoinrrrrr[r.r&r rcopyrrurljoinrr:rrrr<ryrrfetchadd_done_callback_on_end_requeststreaming_callbackrrrdrfrrr!) r/datar< new_requesthrr?rrys @r1rz_HTTPConnection.finishnsyy$$$xx $ "4<<1CT\\R  ' ' )dllM: ::<<+ ++))DLL$8$89K$ll22   $,,z":KO<<--9 99(, (B(BQ(FK %##F+ S T\\%8%8F%B Z'DLL,?,?6,I%* "#'   A  LL003 ,++,,**   8$ 5$s,L LLc8|jjyrY)rrZr6s r1rFz_HTTPConnection._on_end_requests r3chunkc|jry|jj|jj|y|jj |yrY)r.r[rGrr_)r/rLs r1 data_receivedz_HTTPConnection.data_receivedsE  ' ' )  << * * 6 LL + +E 2 KK  u %r3rrY)+r9r:r;rrrFr rrrrr-rr=rrrr SSLContextrrirrrr rrrrr! BaseExceptionrrrr r,r HTTPHeadersr3r.rrFbytesrNr3r1rwrwsU ./  #2t8,  !,!56         B_B tT#s(^S^^3 4>   !  o  D T  @l@t@"8 ,"8 &"8 ] # "8  "8H81(44h6O6OOP1%%1  1.  ?B&5&T&r3rw__main__)?tornado.escapertornadorrtornado.httpclientrrrr r r r tornado.http1connectionr rtornado.iolooprtornado.iostreamrrtornado.netutilrrrr tornado.logrtornado.tcpclientrrrQrBrgrrrrrfior urllib.parsertypingrrrrrrtypesr TYPE_CHECKINGr r!r"r$rArFHTTPMessageDelegaterwr9 configurerSr3r1res# N!8  '   ==  )) )y ) /I/&jOjZ}&h22}&@ zO34Fr3