Ë
    òT•j3  ã                   óø  — 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                  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(  rf edde«      5 Zej2                  j5                  «       Z eded   ded   d«       ddlZ ej<                  d«       ej?                  «        ddd«       yy# 1 sw Y   yxY w)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y)ÚServerHandlerc                 óê   — 	 | j                   j                  | j                  j                  dd«      d   | j                  «       t        j                  | «       y # t        j                  | «       w xY w)Nr   é   r   )Úrequest_handlerÚlog_requestÚstatusÚsplitÚ
bytes_sentr   Úclose©Úselfs    ú,/usr/lib/python3.12/wsgiref/simple_server.pyr   zServerHandler.close    sY   € ð	&Ø× Ñ ×,Ñ,Ø—‘×!Ñ! # aÓ(¨Ñ+¨T¯_©_ôô ×Ñ Õ%øŒM×Ñ Õ%ús   ‚AA ÁA2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y)r   z7BaseHTTPServer that implements the Python WSGI protocolNc                 óN   — t        j                  | «       | j                  «        y)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<   y )	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   s^   € à"$Ð$ˆˆdÔØ!×-Ñ-ˆˆMÑØ#,ˆÐÑ Ü  ×!1Ñ!1Ó2ˆˆMÑØˆˆMÑØ ˆÐÑØˆˆMÒr!   c                 ó   — | j                   S ©N©Úapplicationr   s    r   Úget_appzWSGIServer.get_app?   s   € Ø×ÑÐr!   c                 ó   — || _         y 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à€Kòò
 ò ó'r!   r   c                   ó(   — e Zd Zdez   Zd„ Zd„ Zd„ Zy)r   r   c                 ó°  — | j                   j                  j                  «       }| j                  |d<   | j                  |d<   | j
                  |d<   d| j                  v r | j                  j                  dd«      \  }}n| j                  d}}t        j                  j                  |d«      |d<   ||d	<   | j                  «       }|| j                  d
   k7  r||d<   | j                  d
   |d<   | j                  j                  d«      €| j                  j                  «       |d<   n| j                  d   |d<   | j                  j                  d«      }|r||d<   | j                  j!                  «       D ]]  \  }}|j#                  dd«      j%                  «       }|j'                  «       }||v rŒ;d|z   |v r|d|z   xx   d|z   z  cc<   ŒV||d|z   <   Œ_ |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‰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                 ó"   — t         j                  S r4   )ÚsysÚstderrr   s    r   Ú
get_stderrzWSGIRequestHandler.get_stderrp   s   € Ü�z‰zÐr!   c                 óÄ  — | j                   j                  d«      | _        t        | j                  «      dkD  r'd| _        d| _        d| _        | j                  d«       y| j                  «       syt        | j                   | j                  | j                  «       | j                  «       d¬«      }| |_        |j                  | j                  j!                  «       «       y)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™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)r   r   r   Ú__version__rL   r`   rd   rq   r    r!   r   r   r   G   s   „ à" [Ñ0€Nò#òJó+r!   r   c                 ó  — ddl m}  |«       }t        d|¬«       t        |¬«       t        | j	                  «       «      }|D ]  \  }}t        |dt        |«      |¬«       Œ  |ddg«       |j                  «       j                  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|   € ÝÙ‹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_classrI   s         r   r
   r
   –   s%   € ñ ˜4 ˜,¨Ó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•      s  ðñ
÷ ;Û 
Û Ý *Ý *à€Ú
I€ð  Ñ,€Ù#Ó%¨Ñ+¨c¯k©k×.?Ñ.?Ó.AÀ!Ñ.DÑD€Ø! CÑ'¨+Ñ5Ð ô
&�Mô 
&ô'�ô 'ô:?+Ð/ô ?+òF	/ð #-Ð<Nóð ˆzÒÙ	�R˜˜xÓ	(ð ¨EØ�\‰\×%Ñ%Ó'ˆÙÐ  A¡¨°°1±°uÔ=ÛØˆ
�‰Ð7Ô8Ø×ÑÔ÷ð ð ÷ð ús   ÂAC0Ã0C9