f3dZddlmZmZddlZddlZddlmZddl m Z dZ gdZ de zZ e d zejjdzZe d zezZGd d eZGd deZGddeZdZeefdZedk(rfedde5Zej2j5ZededdeddddlZej<dej?dddyy#1swYyxYw)a!BaseHTTPServer that implements the Python WSGI protocol (PEP 3333) This is both an example of how WSGI can be implemented, and a basis for running simple web applications on a local machine, such as might be done when testing or debugging an application. It has not been reviewed for security issues, however, and we strongly recommend that you use a "real" web server for production use. For example usage, see the 'if __name__=="__main__"' block at the end of the module. See also the BaseHTTPServer module docs for other API information. )BaseHTTPRequestHandler HTTPServerN) SimpleHandler)python_implementationz0.2) WSGIServerWSGIRequestHandlerdemo_app make_server WSGIServer// ceZdZeZdZy) ServerHandlerc |jj|jjddd|jt j |y#t j |wxYw)Nr r)request_handler log_requeststatussplit bytes_sentrcloseselfs ,/usr/lib/python3.12/wsgiref/simple_server.pyrzServerHandler.close sY &  , , !!#a(+T__     %M   %s AAA2N)__name__ __module__ __qualname__software_versionserver_softwarerrrrs &O&r!rc,eZdZdZdZdZdZdZdZy)rz7BaseHTTPServer that implements the Python WSGI protocolNcNtj||jy)z.Override server_bind to store the server name.N)r server_bind setup_environrs rr$zWSGIServer.server_bind0st$ r!cix}|_|j|d<d|d<t|j|d<d|d<d|d<d|d<y) N SERVER_NAMEzCGI/1.1GATEWAY_INTERFACE SERVER_PORT REMOTE_HOSTCONTENT_LENGTH SCRIPT_NAME) base_environ server_namestr server_port)renvs rr%zWSGIServer.setup_environ5s^"$$d!--M#,   !1!12MM  Mr!c|jSN applicationrs rget_appzWSGIServer.get_app?sr!c||_yr4r5)rr6s rset_appzWSGIServer.set_appBs &r!) rrr__doc__r6r$r%r7r9r r!rrr*sAK   'r!rc(eZdZdezZdZdZdZy)rr c|jjj}|j|d<|j|d<|j |d<d|j vr |j jdd\}}n|j d}}tjj|d|d<||d <|j}||jd k7r||d <|jd |d <|jjd |jj|d<n|jd |d<|jjd}|r||d<|jj!D]]\}}|j#ddj%}|j'}||vr;d|z|vr|d|zxxd|zz cc<V||d|z<_|S)NSERVER_PROTOCOLSERVER_SOFTWAREREQUEST_METHOD?rr*z iso-8859-1 PATH_INFO QUERY_STRINGrr+ REMOTE_ADDRz content-type CONTENT_TYPEzcontent-lengthr,-_HTTP_,)serverr.copyrequest_versionserver_versioncommandpathrurllibparseunquoteaddress_stringclient_addressheadersgetget_content_typeitemsreplaceupperstrip)rr2rNqueryhostlengthkvs r get_environzWSGIRequestHandler.get_environKskk&&++-!%!5!5 !%!4!4  $   $)) Q/JD2D!<<//lCK#N""$ 4&&q) )!%C !003M <<  N + 3"&,,"?"?"AC "&,,~">C !!"23 $*C !LL&&( #DAqiiC &&(AAGGI!CxqyCGAI#a%'!"GAI # r!c"tjSr4)sysstderrrs r get_stderrzWSGIRequestHandler.get_stderrps zzr!c|jjd|_t|jdkDr'd|_d|_d|_|jdy|jsyt|j|j|j|jd}||_ |j|jj!y)zHandle a single HTTP requestiir*iNF) multithread)rfilereadlineraw_requestlinelen requestlinerKrM send_error parse_requestrwfilerdr`rrunrIr7)rhandlers rhandlezWSGIRequestHandler.handless $zz2259 t## $u ,!D #%D DL OOC !!#  JJ DOO$5t7G7G7I #' DKK'')*r!N)rrr __version__rLr`rdrqr r!rrrGs"[0N#J+r!rcddlm}|}td|t|t|j }|D]\}}t|dt |||ddg|j jdgS) Nr)StringIOz Hello world!)file=z200 OK)z Content-Typeztext/plain; charset=utf-8zutf-8)iortprintsortedrWreprgetvalueencode)environstart_responsertstdouthr^r_s rr r s| ZF .v& vw}}A*! aDG&)*8JKL OO  $ $W - ..r!c>|||f|}|j||S)zACreate a new WSGI server listening on `host` and `port` for `app`)r9)r\portapp server_class handler_classrIs rr r s%4, 6F NN3 Mr!__main__r*i@zServing HTTP onrrz...zhttp://localhost:8000/xyz?abc) r: http.serverrrrb urllib.parserOwsgiref.handlersrplatformrrr__all__rLversionr sys_versionrrrrr r rhttpdsocket getsocknamesarx webbrowseropenhandle_requestr r!rrs ; ** I,#%+ckk.?.?.A!.DD !C'+5 &M &'':?+/?+F /#-