ó
    F\h¼  ã                   ó  • S r SSKJrJr  SSKrSSKrSSKJr  SSK	J
r
  Sr/ SQrS\-   r\
" 5       S	-   \R                  R                  5       S   -   r\S
-   \-   r " S S\5      r " S S\5      r " S S\5      rS r\\4S jr\S:X  af  \" SS\5       r\R2                  R5                  5       r\" S\S   S\S   S5        SSKr\R<                  " S5        \R?                  5         SSS5        gg! , (       d  f       g= f)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_implementationz0.2)Ú
WSGIServerÚWSGIRequestHandlerÚdemo_appÚmake_serverúWSGIServer/Ú/Ú c                   ó   • \ rS rSr\rS rSrg)ÚServerHandleré   c                 óî   •  U R                   R                  U R                  R                  SS5      S   U R                  5        [
        R                  " U 5        g ! [
        R                  " U 5        f = f)Nr   é   r   )Úrequest_handlerÚlog_requestÚstatusÚsplitÚ
bytes_sentr   Úclose©Úselfs    Ú,/usr/lib/python3.13/wsgiref/simple_server.pyr   ÚServerHandler.close    sY   € ð	&Ø× Ñ ×,Ñ,Ø—‘×!Ñ! # aÓ(¨Ñ+¨T¯_©_ôô ×Ò Õ%øŒM×Ò Õ%ús   ‚AA ÁA4© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úsoftware_versionÚserver_softwarer   Ú__static_attributes__r   ó    r   r   r      s   † à&€Oõ&r%   r   c                   ó4   • \ rS rSrSrSrS rS rS rS r	Sr
g)	r   é*   z7BaseHTTPServer that implements the Python WSGI protocolNc                 óP   • [         R                  " U 5        U R                  5         g)z.Override server_bind to store the server name.N)r   Úserver_bindÚsetup_environr   s    r   r)   ÚWSGIServer.server_bind0   s   € ä×Ò˜tÔ$Ø×ÑÕr%   c                 óŠ   • 0 =ol         U R                  US'   SUS'   [        U R                  5      US'   SUS'   SUS'   SUS'   g )	NÚSERVER_NAMEzCGI/1.1ÚGATEWAY_INTERFACEÚSERVER_PORTÚ ÚREMOTE_HOSTÚCONTENT_LENGTHÚSCRIPT_NAME)Úbase_environÚserver_nameÚstrÚserver_port)r   Úenvs     r   r*   ÚWSGIServer.setup_environ5   s\   € à"$Ð$ˆÔØ!×-Ñ-ˆˆMÑØ#,ˆÐÑ Ü  ×!1Ñ!1Ó2ˆˆMÑØˆˆMÑØ ˆÐÑØˆˆMÒr%   c                 ó   • U R                   $ ©N©Úapplicationr   s    r   Úget_appÚWSGIServer.get_app?   s   € Ø×ÑÐr%   c                 ó   • Xl         g r;   r<   )r   r=   s     r   Úset_appÚWSGIServer.set_appB   s   € Ø&Õr%   )r=   r4   )r   r   r    r!   Ú__doc__r=   r)   r*   r>   rA   r$   r   r%   r   r   r   *   s   † áAà€Kòò
 ò õ'r%   r   c                   ó0   • \ rS rSrS\-   rS rS rS rSr	g)r   éG   r   c                 ór  • U R                   R                  R                  5       nU R                  US'   U R                  US'   U R
                  US'   SU R                  ;   a  U R                  R                  SS5      u  p#OU R                  Sp2[        R                  R                  US5      US'   X1S	'   U R                  S
   US'   U R                  R                  S5      c  U R                  R                  5       US'   OU R                  S   US'   U R                  R                  S5      nU(       a  XAS'   U R                  R                  5        H`  u  pVUR!                  SS5      R#                  5       oVR%                  5       nXQ;   a  M;  SU-   U;   a  USU-   ==   SU-   -  ss'   MY  XaSU-   '   Mb     U$ )NÚSERVER_PROTOCOLÚSERVER_SOFTWAREÚREQUEST_METHODÚ?r   r0   z
iso-8859-1Ú	PATH_INFOÚQUERY_STRINGr   ÚREMOTE_ADDRzcontent-typeÚCONTENT_TYPEzcontent-lengthr2   Ú-Ú_ÚHTTP_Ú,)Úserverr4   ÚcopyÚrequest_versionÚserver_versionÚcommandÚpathr   ÚurllibÚparseÚunquoteÚclient_addressÚheadersÚgetÚget_content_typeÚitemsÚreplaceÚupperÚstrip)r   r8   rX   ÚqueryÚlengthÚkÚvs          r   Úget_environÚWSGIRequestHandler.get_environK   sˆ  € Ø�k‰k×&Ñ&×+Ñ+Ó-ˆØ!%×!5Ñ!5ˆÐÑØ!%×!4Ñ!4ˆÐÑØ $§¡ˆÐÑØ�$—)‘)ÓØŸ™Ÿ™¨¨QÓ/‰JˆD�àŸ™ 2�ä!Ÿ<™<×/Ñ/°°lÓCˆˆKÑØ#ˆNÑØ!×0Ñ0°Ñ3ˆˆMÑà�<‰<×Ñ˜NÓ+Ñ3Ø"&§,¡,×"?Ñ"?Ó"AˆC�Òà"&§,¡,¨~Ñ">ˆC�Ñà—‘×!Ñ!Ð"2Ó3ˆÞØ$*Ð Ñ!à—L‘L×&Ñ&Ö(‰DˆAØ�i‰i˜˜CÓ ×&Ñ&Ó(ˆA¯G©G«I¨!Ø‹xÙØ�q‰y˜CÓØ�G˜A‘I“ # a¡%Ñ'•à!"�G˜A‘I“ñ )ð ˆ
r%   c                 ó"   • [         R                  $ r;   )ÚsysÚstderrr   s    r   Ú
get_stderrÚWSGIRequestHandler.get_stderrl   s   € Ü�z‰zÐr%   c                 óÈ  • U R                   R                  S5      U l        [        U R                  5      S:”  a'  SU l        SU l        SU l        U R                  S5        gU R                  5       (       d  g[        U R                   U R                  U R                  5       U R                  5       SS9nXl        UR                  U R                  R!                  5       5        g)zHandle a single HTTP requesti  i   r0   iž  NF)Úmultithread)ÚrfileÚreadlineÚraw_requestlineÚlenÚrequestlinerU   rW   Ú
send_errorÚparse_requestr   Úwfilerm   rh   r   ÚrunrS   r>   )r   Úhandlers     r   ÚhandleÚWSGIRequestHandler.handleo   sµ   € ð  $Ÿ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%   )rW   rs   rU   ru   N)
r   r   r    r!   Ú__version__rV   rh   rm   r{   r$   r   r%   r   r   r   G   s   † à" [Ñ0€NòòBõ+r%   r   c                 ó  • SSK Jn  U" 5       n[        SUS9  [        US9  [        U R	                  5       5      nU H  u  pV[        US[        U5      US9  M     U" SS/5        UR                  5       R                  S5      /$ )	Nr   )ÚStringIOzHello world!)ÚfileÚ=z200 OK)zContent-Typeztext/plain; charset=utf-8zutf-8)Úior   ÚprintÚsortedr`   ÚreprÚgetvalueÚencode)ÚenvironÚstart_responser   ÚstdoutÚhrf   rg   s          r   r	   r	   †   su   € ÝÙ‹Z€FÜ	ˆ.˜vÒ&Ü	ˆvÒÜˆw�}‰}‹Ó€AÛ‰ˆÜˆa�”D˜“G &Ô)ñ á�8ÐJÐKÔLØ�O‰OÓ×$Ñ$ WÓ-Ð.Ð.r%   c                 ó<   • U" X4U5      nUR                  U5        U$ )zACreate a new WSGI server listening on `host` and `port` for `app`)rA   )ÚhostÚportÚappÚserver_classÚhandler_classrS   s         r   r
   r
   ’   s#   € ñ ˜4˜,¨Ó6€FØ
‡N�N�3ÔØ€Mr%   Ú__main__r0   i@  zServing HTTP onrŽ   r   z...zhttp://localhost:8000/xyz?abc) rC   Úhttp.serverr   r   rk   Úurllib.parserY   Úwsgiref.handlersr   Úplatformr   r}   Ú__all__rV   Úversionr   Úsys_versionr"   r   r   r   r	   r
   r   ÚhttpdÚsocketÚgetsocknameÚsarƒ   Ú
webbrowserÚopenÚhandle_requestr   r%   r   Ú<module>r¡      s  ðñ
÷ ;Û 
Û Ý *Ý *à€Ú
I€ð  Ñ,€Ù#Ó%¨Ñ+¨c¯k©k×.?Ñ.?Ó.AÀ!Ñ.DÑD€Ø! CÑ'¨+Ñ5Ð ô
&�Mô 
&ô'�ô 'ô:;+Ð/ô ;+ò~	/ð #-Ð<Nôð ˆzÓÙ	�R˜˜xÔ	(¨EØ�\‰\×%Ñ%Ó'ˆÙÐ  A¡¨°°1±°uÔ=ÛØ�ŠÐ7Ô8Ø×ÑÔ÷ 
)Ð	(ð ß	(Õ	(ús   ÂAC2Ã2
D 