
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a3  ã                	   @   s  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
dddd	g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�reddeƒ�BZej ¡ Zeded  ded dƒ d dlZe d¡ e ¡  W 5 Q R X 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   s4   z"| j | j dd¡d | j¡ W 5 t  | ¡ X d S )Nr   é   r   )r   ÚcloseÚrequest_handlerZlog_requestZstatusÚsplitZ
bytes_sent©Úself© r   ú:/opt/alt/python38/lib64/python3.8/wsgiref/simple_server.pyr       s     ÿzServerHandler.closeN)Ú__name__Ú
__module__Ú__qualname__Úsoftware_versionZserver_softwarer   r   r   r   r   r      s   r   c                   @   s0   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?   s    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
   
c                   @   s,   e Zd Zde Zdd„ Zdd„ Zdd„ ZdS )	r   r
   c                 C   sP  | j j ¡ }| j|d< | j|d< | j|d< d| jkrH| j dd¡\}}n| jd }}tj	 
|d¡|d< ||d	< |  ¡ }|| jd
 krŒ||d< | jd
 |d< | j d¡d krº| j ¡ |d< n| jd |d< | j d¡}|rà||d< | j ¡ D ]`\}}| dd¡ ¡ }| ¡ }||k�rqêd| |k�r>|d|   d| 7  < qê||d| < qê|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ÚparseZunquoteZaddress_stringZclient_addressZheadersÚgetZget_content_typeÚitemsÚreplaceÚupperÚstrip)r   r"   r0   ZqueryÚhostZlengthÚkÚvr   r   r   Úget_environK   s8    



 
zWSGIRequestHandler.get_environc                 C   s   t jS r   )ÚsysÚstderrr   r   r   r   Ú
get_stderrp   s    zWSGIRequestHandler.get_stderrc                 C   s€   | j  d¡| _t| jƒdkr<d| _d| _d| _|  d¡ d S |  ¡ sHd S t	| j | j
|  ¡ |  ¡ dd�}| |_| | j ¡ ¡ d S )Ni  i   r   iž  F)Zmultithread)ZrfileÚreadlineZraw_requestlineÚlenZrequestliner-   r/   Z
send_errorZparse_requestr   Zwfiler>   r;   r   Úrunr+   r%   )r   Zhandlerr   r   r   Úhandles   s$    
   þzWSGIRequestHandler.handleN)r   r   r   Ú__version__r.   r;   r>   rB   r   r   r   r   r   G   s   %c                 C   sr   ddl m} |ƒ }td|d� t|d� t|  ¡ ƒ}|D ]\}}t|dt|ƒ|d� q8|ddgƒ | ¡  d¡gS )	Nr   )ÚStringIOzHello world!)Úfileú=z200 OK)zContent-Typeztext/plain; charset=utf-8zutf-8)ÚiorD   ÚprintÚsortedr4   ÚreprÚgetvalueÚencode)ÚenvironZstart_responserD   ÚstdoutÚhr9   r:   r   r   r   r   Š   s    
c                 C   s   || |f|ƒ}|  |¡ |S r   )r&   )r8   ÚportZappZserver_classZhandler_classr+   r   r   r   r	   –   s    
Ú__main__r   i@  zServing HTTP onrP   r   z...zhttp://localhost:8000/xyz?abc)Zhttp.serverr   r   r<   Zurllib.parser1   Zwsgiref.handlersr   Úplatformr   rC   Ú__all__r.   Úversionr   Úsys_versionr   r   r   r   r   r	   r   ZhttpdZsocketZgetsocknameZsarH   Z
webbrowserÚopenZhandle_requestr   r   r   r   Ú<module>   s.   C ÿ
	


