
    Rh3                        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   kk&&++-!%!5!5!%!4!4 $$))Q/JD2D!<<//lCK#N""$4&&q))!%C!003M<<N+3"&,,"?"?"AC"&,,~">C!!"23$*C !LL&&( 	#DAqiiC &&(AAGGI!CxqyCGAI#a%'!"GAI	# 
r!   c                 "    t         j                  S r4   )sysstderrr   s    r   
get_stderrzWSGIRequestHandler.get_stderrp   s    zz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      $zz2259t##$u,!D#%D DLOOC !!#JJ

DOO$5t7G7G7I
 #'DKK'')*r!   N)r   r   r   __version__rL   r`   rd   rq   r    r!   r   r   r   G   s    "[0N#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|    ZF	.v&	vw}}A *!aDG&)*8JKLOO$$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,6F
NN3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 ,#%+ckk.?.?.A!.DD!C'+5 
&M 
&' ':?+/ ?+F	/ #-<N z	Rx	( E\\%%'A1u=
78   s   AC00C9