
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a3  ã                	   @   s   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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 )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                   @   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                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )r   z7BaseHTTPServer that implements the Python WSGI protocolNc                 C   s   t  | ¡ |  ¡  dS )z.Override server_bind to store the server name.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 ©N©Ú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   Ú__doc__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!   r1   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 )zHandle a single HTTP requesti  i   r   iž  NF)Zmultithread)ZrfileÚreadlineZraw_requestlineÚlenZrequestliner.   r0   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?   rC   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)ÚiorE   ÚprintÚsortedr5   ÚreprÚgetvalueÚencode)ÚenvironZstart_responserE   ÚstdoutÚhr:   r;   r   r   r   r   Š   s    
c                 C   s   || |f|ƒ}|  |¡ |S )zACreate a new WSGI server listening on `host` and `port` for `app`)r&   )r9   ÚportZappZserver_classZhandler_classr,   r   r   r   r	   –   s    
Ú__main__r   i@  zServing HTTP onrQ   r   z...zhttp://localhost:8000/xyz?abc) r'   Zhttp.serverr   r   r=   Zurllib.parser2   Zwsgiref.handlersr   Úplatformr   rD   Ú__all__r/   Úversionr   Úsys_versionr   r   r   r   r   r	   r   ZhttpdZsocketZgetsocknameZsarI   Z
webbrowserÚopenZhandle_requestr   r   r   r   Ú<module>   s0   C ÿ
	


