Ë (ºµ�1oõãóø—dZddlmZmZddlZddlZddlmZddl m Z dZ gd¢Z de zZ e «d zejj«dzZe d zezZGd „d e«ZGd „de«ZGd„de«Zd„Zeefd„Zedk(rfedde«5Zej2j5«Zededdedd«ddlZej<d«ej?«ddd«yy#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)Ú WSGIServerÚWSGIRequestHandlerÚdemo_appÚ make_serverú WSGIServer/Ú/Ú có—eZdZeZd„Zy)Ú ServerHandlercóê— |jj|jjdd«d|j«t j |«y#t j |«wxYw)Nr ér)Úrequest_handlerÚ log_requestÚstatusÚsplitÚ bytes_sentrÚclose©Úselfs ú,/usr/lib/python3.12/wsgiref/simple_server.pyrzServerHandler.close sY€ð &Ø × Ñ × ,Ñ ,Ø— ‘ ×!Ñ! # aÓ(¨Ñ+¨T¯_©_ô ô × Ñ  Õ %øŒM× Ñ  Õ %ús ‚AAÁA2N)Ú__name__Ú __module__Ú __qualname__Úsoftware_versionÚserver_softwarer©órrrs „à&€Oó&r!rcó,—eZdZdZdZd„Zd„Zd„Zd„Zy)rz7BaseHTTPServer that implements the Python WSGI protocolNcóN—tj|«|j«y)z.Override server_bind to store the server name.N)rÚ server_bindÚ setup_environrs rr$zWSGIServer.server_bind0s€ä×јtÔ$Ø ×ÑÕr!cóŒ—ix}|_|j|d<d|d<t|j«|d<d|d<d|d<d|d<y) NÚ SERVER_NAMEzCGI/1.1ÚGATEWAY_INTERFACEÚ SERVER_PORTÚÚ REMOTE_HOSTÚCONTENT_LENGTHÚ SCRIPT_NAME)Ú base_environÚ server_nameÚstrÚ server_port)rÚenvs rr%zWSGIServer.setup_environ5s^€à"$Ð$ˆˆdÔØ!×-Ñ-ˆˆMÑØ#,ˆÐ Ñ Ü  ×!1Ñ!1Ó2ˆˆMÑØˆˆMÑØ ˆÐ ÑØˆˆMÒr!có—|jS©N©Ú applicationrs rÚget_appzWSGIServer.get_app?s€Ø×ÑÐr!có—||_yr4r5)rr6s rÚset_appzWSGIServer.set_appBs €Ø&ˆÕr!) rrrÚ__doc__r6r$r%r7r9r r!rrr*s„áAà€Kòò  ò ó'r!rcó(—eZdZdezZd„Zd„Zd„Zy)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#dd«j%«}|j'«}||vrŒ;d|z|vr|d|zxxd|zz cc<ŒV||d|z<Œ_|S)NÚSERVER_PROTOCOLÚSERVER_SOFTWAREÚREQUEST_METHODÚ?rr*z iso-8859-1Ú PATH_INFOÚ QUERY_STRINGrr+Ú REMOTE_ADDRz content-typeÚ CONTENT_TYPEzcontent-lengthr,Ú-Ú_ÚHTTP_Ú,)Úserverr.ÚcopyÚrequest_versionÚserver_versionÚcommandÚpathrÚurllibÚparseÚunquoteÚaddress_stringÚclient_addressÚheadersÚgetÚget_content_typeÚitemsÚreplaceÚupperÚstrip)rr2rNÚqueryÚhostÚlengthÚkÚvs rÚ get_environzWSGIRequestHandler.get_environKsÁ€Ø�k‰k×&Ñ&×+Ñ+Ó-ˆØ!%×!5Ñ!5ˆÐ ÑØ!%×!4Ñ!4ˆÐ ÑØ $§ ¡ ˆÐ ÑØ �$—)‘)Ñ ØŸ™Ÿ™¨¨QÓ/‰JˆD‘àŸ™ 2�ˆDä!Ÿ<™<×/Ñ/°°lÓCˆˆKÑØ#ˆˆNÑà×"Ñ"Ó$ˆØ �4×&Ñ& qÑ)Ò )Ø!%ˆC� Ñ Ø!×0Ñ0°Ñ3ˆˆMÑà �<‰<× Ñ ˜NÓ +Ð 3Ø"&§,¡,×"?Ñ"?Ó"AˆC�Ò à"&§,¡,¨~Ñ">ˆC�Ñ à—‘×!Ñ!Ð"2Ó3ˆÙ Ø$*ˆCÐ Ñ !à—L‘L×&Ñ&Ö(‰DˆAˆqØ�i‰i˜˜CÓ ×&Ñ&Ó(ˆA¨A¯G©G«I¨!Ø�C‰xØØ�q‰y˜CÑØ�G˜A‘I“ # a¡%Ñ'”à!"��G˜A‘I’ð)ðˆ r!có"—tjSr4)ÚsysÚstderrrs rÚ get_stderrzWSGIRequestHandler.get_stderrps €Ü�z‰zÐr!cóÄ—|jjd«|_t|j«dkDr'd|_d|_d|_|jd«y|j«syt|j|j|j«|j«d¬«}||_ |j|jj!««y)zHandle a single HTTP requestiir*ižNF)Ú multithread)ÚrfileÚreadlineÚraw_requestlineÚlenÚ requestlinerKrMÚ send_errorÚ parse_requestrÚwfilerdr`rÚrunrIr7)rÚhandlers rÚhandlezWSGIRequestHandler.handless´€ð $Ÿz™z×2Ñ2°5Ó9ˆÔÜ ˆt×#Ñ#Ó $ uÒ ,Ø!ˆDÔ Ø#%ˆDÔ ØˆDŒLØ �O‰O˜CÔ Ø à×!Ñ!Ô#Ø äØ �J‰J˜Ÿ ™  D§O¡OÓ$5°t×7GÑ7GÓ7IØô ˆð#'ˆÔØ� ‰ �D—K‘K×'Ñ'Ó)Õ*r!N)rrrÚ __version__rLr`rdrqr r!rrrGs„à" [Ñ0€Nò#òJó+r!rcó—ddlm}|«}td|¬«t|¬«t|j ««}|D]\}}t|dt |«|¬«Œ|ddg«|j «jd«gS) Nr)ÚStringIOz Hello world!)ÚfileÚ=z200 OK)z Content-Typeztext/plain; charset=utf-8zutf-8)ÚiortÚprintÚsortedrWÚreprÚgetvalueÚencode)ÚenvironÚstart_responsertÚstdoutÚhr^r_s rr r Šsw€ÝÙ ‹Z€FÜ ˆ.˜vÕ&Ü ˆvÕ܈w�}‰}‹Ó€AÛ‰ˆˆ!Ü ˆa�”D˜“G &Ö)ðá�8ÐJÐKÔLØ �O‰OÓ × $Ñ $ WÓ -Ð .Ð.r!có>—|||f|«}|j|«|S)zACreate a new WSGI server listening on `host` and `port` for `app`)r9)r\ÚportÚappÚ server_classÚ handler_classrIs rr r –s%€ñ˜4 ˜,¨ Ó 6€FØ ‡N�N�3ÔØ €Mr!Ú__main__r*i@zServing HTTP onr‚rz...zhttp://localhost:8000/xyz?abc) r:Ú http.serverrrrbÚ urllib.parserOÚwsgiref.handlersrÚplatformrrrÚ__all__rLÚversionrÚ sys_versionrrrrr r rÚhttpdÚsocketÚ getsocknameÚsarxÚ webbrowserÚopenÚhandle_requestr r!rÚr•sðñ ÷;Û ÛÝ*Ý*à€ Ú I€ð Ñ,€Ù#Ó%¨Ñ+¨c¯k©k×.?Ñ.?Ó.AÀ!Ñ.DÑD€ Ø! CÑ'¨+Ñ5Ðô &�Mô &ô'�ô'ô:?+Ð/ô?+òF /ð#-Ð