509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \  ã               @   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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jƒ Zeded ded dƒ ddlZejdƒ ejƒ  W d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_serverzWSGIServer/ú/ú c               @   s   e Zd ZeZdd„ ZdS )ÚServerHandlerc             C   s4   z"| j j| jjddƒd | jƒ W d tj| ƒ X d S )Nr   é   r   )Úrequest_handlerZlog_requestZstatusÚsplitZ
bytes_sentr   Úclose)Úself© r   ú-/usr/lib64/python3.6/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 j| ƒ | jƒ  dS )z.Override server_bind to store the server name.N)r   Úserver_bindÚsetup_environ)r   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)Úapplication)r   r   r   r   Úget_app?   s    zWSGIServer.get_appc             C   s
   || _ d S )N)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   zWSGIServer/c             C   sT  | j jjƒ }| j|d< | j|d< | j|d< d| jkrH| jjddƒ\}}n| jd }}tj	j
|dƒ|d< ||d	< | jƒ }|| jd
 krŒ||d< | jd
 |d< | jjdƒd krº| jjƒ |d< n| jd |d< | jjdƒ}|rà||d< xn| jjƒ D ]`\}}|jddƒjƒ }|jƒ }||k�rqìd| |k�r@|d|   d| 7  < qì||d| < qìW |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   r-   ZqueryÚhostZlengthÚkÚvr   r   r   Úget_environK   s8    



 
zWSGIRequestHandler.get_environc             C   s   t jS )N)ÚsysÚstderr)r   r   r   r   Ú
get_stderrp   s    zWSGIRequestHandler.get_stderrc             C   s|   | j jdƒ| _t| jƒdkr<d| _d| _d| _| jdƒ dS | jƒ sHdS t	| j | j
| jƒ | jƒ ƒ}| |_|j| jjƒ ƒ dS )zHandle a single HTTP requesti  i   r   iž  N)ZrfileÚreadlineZraw_requestlineÚlenZrequestliner*   r,   Z
send_errorZparse_requestr   Zwfiler;   r8   r   Zrunr(   r!   )r   Zhandlerr   r   r   Úhandles   s    
zWSGIRequestHandler.handleN)r   r   r   Ú__version__r+   r8   r;   r>   r   r   r   r   r   G   s   %c             C   sv   ddl m} |ƒ }td|d� t|d� t| jƒ ƒ}x$|D ]\}}t|dt|ƒ|d� q:W |dd
gƒ |jƒ jd	ƒgS )Nr   )ÚStringIOzHello world!)Úfileú=z200 OKúContent-Typeútext/plain; charset=utf-8zutf-8)rC   rD   )Úior@   ÚprintÚsortedr1   ÚreprÚgetvalueÚencode)ÚenvironZstart_responser@   ÚstdoutÚhr6   r7   r   r   r   r   ‰   s    
c             C   s   || |f|ƒ}|j |ƒ |S )zACreate a new WSGI server listening on `host` and `port` for `app`)r"   )r5   ÚportZappZserver_classZhandler_classr(   r   r   r   r	   •   s    
Ú__main__r   i@  zServing HTTP onrN   r   z...zhttp://localhost:8000/xyz?abc) r#   Zhttp.serverr   r   r9   Zurllib.parser.   Zwsgiref.handlersr   Úplatformr   r?   Ú__all__r+   Úversionr   Úsys_versionr   r   r   r   r   r	   r   ZhttpdZsocketZgetsocknameZsarF   Z
webbrowserÚopenZhandle_requestr   r   r   r   Ú<module>   s,   B


