§
    (¶Õi3  ã                   ó<  — d Z ddlmZmZ ddlZddlZddlmZ ddl	m
Z
 dZg d¢Zdez   Z e
¦   «         d	z   ej                             ¦   «         d         z   Zed
z   ez   Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zd„ Zeefd„Zedk    r„ edde¦  «        5 Zej                             ¦   «         Z eded         ded         d¦  «         ddlZ ej        d¦  «         e                     ¦   «          ddd¦  «         dS # 1 swxY w Y   dS dS )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                   ó   — e Zd ZeZd„ ZdS )ÚServerHandlerc                 óà   — 	 | j                              | j                             dd¦  «        d         | j        ¦  «         t          j        | ¦  «         d S # t          j        | ¦  «         w xY w)Nr   é   r   )Úrequest_handlerÚlog_requestÚstatusÚsplitÚ
bytes_sentr   Úclose©Úselfs    ú,/usr/lib/python3.11/wsgiref/simple_server.pyr   zServerHandler.close    sp   € ð	&ØÔ ×,Ò,Ø”×!Ò! # aÑ(Ô(¨Ô+¨T¬_ñô ð õ Ô Ñ%Ô%Ð%Ð%Ð%ø�MÔ Ñ%Ô%Ð%Ð%øøøs   ‚?A ÁA-N)Ú__name__Ú
__module__Ú__qualname__Úsoftware_versionÚserver_softwarer   © ó    r   r   r      s(   € € € € € à&€Oð&ð &ð &ð &ð &r!   r   c                   ó.   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ ZdS )r   z7BaseHTTPServer that implements the Python WSGI protocolNc                 óV   — t          j        | ¦  «         |                      ¦   «          dS )z.Override server_bind to store the server name.N)r   Úserver_bindÚsetup_environr   s    r   r$   zWSGIServer.server_bind0   s+   € åÔ˜tÑ$Ô$Ð$Ø×ÒÑÔÐÐÐr!   c                 ó‚   — i x}| _         | j        |d<   d|d<   t          | j        ¦  «        |d<   d|d<   d|d<   d|d<   d S )	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%   zWSGIServer.setup_environ5   sa   € à"$Ð$ˆˆdÔØ!Ô-ˆˆMÑØ#,ˆÐÑ Ý  Ô!1Ñ2Ô2ˆˆMÑØˆˆMÑØ ˆÐÑØˆˆMÑÐÐr!   c                 ó   — | j         S ©N©Úapplicationr   s    r   Úget_appzWSGIServer.get_app?   s   € ØÔÐr!   c                 ó   — || _         d S r4   r5   )r   r6   s     r   Úset_appzWSGIServer.set_appB   s   € Ø&ˆÔÐÐr!   )	r   r   r   Ú__doc__r6   r$   r%   r7   r9   r    r!   r   r   r   *   s[   € € € € € àAÐAà€Kðð ð ð
 ð  ð  ð ð  ð  ð'ð 'ð 'ð 'ð 'r!   r   c                   ó*   — e Zd Zdez   Zd„ Zd„ Zd„ ZdS )r   r   c                 ó€  — | j         j                             ¦   «         }| j        |d<   | j        |d<   | j        |d<   d| j        v r| j                             dd¦  «        \  }}n	| j        d}}t          j	         
                    |d¦  «        |d<   ||d	<   |                      ¦   «         }|| j        d
         k    r||d<   | j        d
         |d<   | j                             d¦  «        €| j                             ¦   «         |d<   n| j        d         |d<   | j                             d¦  «        }|r||d<   | j                             ¦   «         D ]l\  }}|                     dd¦  «                             ¦   «         }|                     ¦   «         }||v rŒFd|z   |v r|d|z   xx         d|z   z  cc<   Œd||d|z   <   Œm|S )NÚSERVER_PROTOCOLÚSERVER_SOFTWAREÚREQUEST_METHODú?r   r*   z
iso-8859-1Ú	PATH_INFOÚQUERY_STRINGr   r+   ÚREMOTE_ADDRzcontent-typeÚCONTENT_TYPEzcontent-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)r   r2   rN   ÚqueryÚhostÚlengthÚkÚvs           r   Úget_environzWSGIRequestHandler.get_environK   sà  € ØŒkÔ&×+Ò+Ñ-Ô-ˆØ!%Ô!5ˆÐÑØ!%Ô!4ˆÐÑØ $¤ˆÐÑØ�$”)ÐÐØœŸš¨¨QÑ/Ô/‰JˆD��àœ 2�ˆDå!œ<×/Ò/°°lÑCÔCˆˆKÑØ#ˆˆNÑà×"Ò"Ñ$Ô$ˆØ�4Ô& qÔ)Ò)Ð)Ø!%ˆC�ÑØ!Ô0°Ô3ˆˆMÑàŒ<×Ò˜NÑ+Ô+Ð3Ø"&¤,×"?Ò"?Ñ"AÔ"AˆC�ÑÐà"&¤,¨~Ô">ˆC�Ñà”×!Ò!Ð"2Ñ3Ô3ˆØð 	+Ø$*ˆCÐ Ñ!à”L×&Ò&Ñ(Ô(ð 	#ð 	#‰DˆAˆqØ�iŠi˜˜CÑ Ô ×&Ò&Ñ(Ô(ˆA¨A¯GªG©I¬I¨!Ø�CˆxˆxØØ�q‰y˜CÐÐØ�G˜A‘I��” # a¡%Ñ'��‘�à!"��G˜A‘I‘�Øˆ
r!   c                 ó   — t           j        S r4   )ÚsysÚstderrr   s    r   Ú
get_stderrzWSGIRequestHandler.get_stderrp   s
   € ÝŒzÐr!   c                 óâ  — | j                              d¦  «        | _        t          | j        ¦  «        dk    r,d| _        d| _        d| _        |                      d¦  «         dS |                      ¦   «         sdS t          | j         | j
        |                      ¦   «         |                      ¦   «         d¬¦  «        }| |_        |                     | j                             ¦   «         ¦  «         dS )zHandle a single HTTP requesti  i   r*   iž  NF)Úmultithread)ÚrfileÚreadlineÚraw_requestlineÚlenÚrequestlinerK   rM   Ú
send_errorÚparse_requestr   Úwfilerd   r`   r   ÚrunrI   r7   )r   Úhandlers     r   ÚhandlezWSGIRequestHandler.handles   sã   € ð  $œz×2Ò2°5Ñ9Ô9ˆÔÝˆtÔ#Ñ$Ô$ uÒ,Ð,Ø!ˆDÔØ#%ˆDÔ ØˆDŒLØ�OŠO˜CÑ Ô Ð ØˆFà×!Ò!Ñ#Ô#ð 	ØˆFåØŒJ˜œ
 D§O¢OÑ$5Ô$5°t×7GÒ7GÑ7IÔ7IØð
ñ 
ô 
ˆð #'ˆÔØ�Š�D”K×'Ò'Ñ)Ô)Ñ*Ô*Ð*Ð*Ð*r!   N)r   r   r   Ú__version__rL   r`   rd   rq   r    r!   r   r   r   G   sL   € € € € € à" [Ñ0€Nð#ð #ð #ðJð ð ð+ð +ð +ð +ð +r!   r   c                 ó`  — ddl m}  |¦   «         }t          d|¬¦  «         t          |¬¦  «         t          |                      ¦   «         ¦  «        }|D ]%\  }}t          |dt          |¦  «        |¬¦  «         Œ& |ddg¦  «         |                     ¦   «                              d¦  «        gS )	Nr   )ÚStringIOzHello world!)Úfileú=z200 OK)zContent-Typeztext/plain; charset=utf-8zutf-8)Úiort   ÚprintÚsortedrW   ÚreprÚgetvalueÚencode)ÚenvironÚstart_responsert   ÚstdoutÚhr^   r_   s          r   r	   r	   Š   sÂ   € ØÐÐÐÐÐØˆX‰ZŒZ€FÝ	ˆ.˜vÐ&Ñ&Ô&Ð&Ý	ˆvÐÑÔÐÝˆw�}Š}‰ŒÑÔ€AØð *ð *‰ˆˆ!Ýˆa�•D˜‘G”G &Ð)Ñ)Ô)Ð)Ð)Ø€N�8ÐJÐKÑLÔLÐLØ�OŠOÑÔ×$Ò$ WÑ-Ô-Ð.Ð.r!   c                 óL   —  || |f|¦  «        }|                      |¦  «         |S )zACreate a new WSGI server listening on `host` and `port` for `app`)r9   )r\   ÚportÚappÚserver_classÚhandler_classrI   s         r   r
   r
   –   s0   € ð ˆ\˜4 ˜,¨Ñ6Ô6€FØ
‡N‚N�3ÑÔÐØ€Mr!   Ú__main__r*   i@  zServing HTTP onr‚   r   z...zhttp://localhost:8000/xyz?abc) r:   Úhttp.serverr   r   rb   Úurllib.parserO   Úwsgiref.handlersr   Úplatformr   rr   Ú__all__rL   Úversionr   Úsys_versionr   r   r   r   r	   r
   r   ÚhttpdÚsocketÚgetsocknameÚsarx   Ú
webbrowserÚopenÚhandle_requestr    r!   r   ú<module>r•      sS  ðð
ð 
ð ;Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 
€
€
€
Ø Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø *Ð *Ð *Ð *Ð *Ð *à€Ø
IÐ
IÐ
I€ð  Ñ,€Ø#Ð#Ñ%Ô%¨Ñ+¨c¬k×.?Ò.?Ñ.AÔ.AÀ!Ô.DÑD€Ø! CÑ'¨+Ñ5Ð ð
&ð 
&ð 
&ð 
&ð 
&�Mñ 
&ô 
&ð 
&ð'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð:?+ð ?+ð ?+ð ?+ð ?+Ð/ñ ?+ô ?+ð ?+ðF	/ð 	/ð 	/ð #-Ð<Nðð ð ð ð ˆzÒÐØ	ˆ�R˜˜xÑ	(Ô	(ð ¨EØŒ\×%Ò%Ñ'Ô'ˆØˆÐ  A¤¨°°1´°uÑ=Ô=Ð=ØÐÐÐØˆ
ŒÐ7Ñ8Ô8Ð8Ø×ÒÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð Ðs   Â%ADÄDÄD