o
    JAf3                     @   s2  	 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e	 d ej d   Zed	 e ZG d
d deZG dd deZG dd deZdd ZeefddZedkredde'Zej Zeded  ded d d dlZed e  W d   dS 1 sw   Y  dS dS )    )BaseHTTPRequestHandler
HTTPServerN)SimpleHandler)python_implementationz0.2)
WSGIServerWSGIRequestHandlerdemo_appmake_serverWSGIServer// c                   @   s   e Zd ZeZdd ZdS )ServerHandlerc              	   C   s<   z| j | jddd | j W t|  d S t|  w )Nr      r   )request_handlerZlog_requeststatussplitZ
bytes_sentr   closeself r   ,/usr/lib/python3.10/wsgiref/simple_server.pyr       s
   zServerHandler.closeN)__name__
__module____qualname__software_versionZserver_softwarer   r   r   r   r   r      s    r   c                   @   s2   e Zd Z	 dZdd Zdd Zdd Zdd	 ZdS )
r   Nc                 C   s   	 t |  |   d S N)r   server_bindsetup_environr   r   r   r   r   0   s   
zWSGIServer.server_bindc                 C   sF   i  }| _ | j|d< d|d< t| j|d< d|d< d|d< d|d< d S )	NZSERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZSERVER_PORT REMOTE_HOSTCONTENT_LENGTHZSCRIPT_NAME)base_environZserver_namestrZserver_port)r   envr   r   r   r   5   s   

zWSGIServer.setup_environc                 C   s   | j S r   applicationr   r   r   r   get_app?      zWSGIServer.get_appc                 C   s
   || _ d S r   r$   )r   r%   r   r   r   set_appB   s   
zWSGIServer.set_app)r   r   r   r%   r   r   r&   r(   r   r   r   r   r   *   s    
r   c                   @   s,   e Zd Zde Zdd Zdd Zdd ZdS )	r   r
   c                 C   sL  | 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rF||d< | jd
 |d< | jdd u r]| j |d< n| jd |d< | jd}|rp||d< | j D ].\}}|dd }| }||v rqud| |v r|d|   d| 7  < qu||d| < qu|S )NZSERVER_PROTOCOLZSERVER_SOFTWAREZREQUEST_METHOD?r   r   z
iso-8859-1Z	PATH_INFOZQUERY_STRINGr   r   ZREMOTE_ADDRzcontent-typeZCONTENT_TYPEzcontent-lengthr    -_ZHTTP_,)serverr!   copyrequest_versionserver_versioncommandpathr   urllibparseunquoteZaddress_stringZclient_addressZheadersgetZget_content_typeitemsreplaceupperstrip)r   r#   r2   queryhostlengthkvr   r   r   get_environK   s6   



zWSGIRequestHandler.get_environc                 C   s   t jS r   )sysstderrr   r   r   r   
get_stderrp   r'   zWSGIRequestHandler.get_stderrc                 C   s   	 | j d| _t| jdkrd| _d| _d| _| d d S |  s%d S t	| j | j
|  |  dd}| |_|| j  d S )Ni  i   r   i  F)Zmultithread)ZrfilereadlineZraw_requestlinelenZrequestliner/   r1   Z
send_errorZparse_requestr   ZwfilerC   r@   r   runr-   r&   )r   handlerr   r   r   handles   s    
zWSGIRequestHandler.handleN)r   r   r   __version__r0   r@   rC   rH   r   r   r   r   r   G   s
    %r   c                 C   sr   ddl m} | }td|d t|d t|  }|D ]\}}t|dt||d q|ddg | dgS )	Nr   )StringIOzHello world!)file=z200 OK)zContent-Typeztext/plain; charset=utf-8zutf-8)iorJ   printsortedr7   reprgetvalueencode)environZstart_responserJ   stdouthr>   r?   r   r   r   r      s   
r   c                 C   s   	 || |f|}| | |S r   )r(   )r<   portZappZserver_classZhandler_classr-   r   r   r   r	      s   
r	   __main__r   i@  zServing HTTP onrV   r   z...zhttp://localhost:8000/xyz?abc)Zhttp.serverr   r   rA   urllib.parser3   Zwsgiref.handlersr   platformr   rI   __all__r0   versionr   sys_versionr   r   r   r   r   r	   r   ZhttpdsocketgetsocknamesarN   Z
webbrowseropenZhandle_requestr   r   r   r   <module>   s4    C
	


"