3 Õì2aã @sddlmZmZddlZddlZddlmZddlm Z dZ dddd gZ d e Z e ƒd ej jƒdZe d eZGd d„deƒZGdd„deƒZGdd„deƒZdd„Zeefdd „Zedk�reddeƒ�BZejjƒZededdeddƒddlZejdƒejƒWdQRXdS)é)ÚBaseHTTPRequestHandlerÚ HTTPServerN)Ú SimpleHandler)Úpython_implementationz0.2Ú WSGIServerÚWSGIRequestHandlerÚdemo_appÚ make_serverz WSGIServer/ú/ú c@seZdZeZdd„ZdS)Ú ServerHandlerc Cs4z"|jj|jjddƒd|jƒWdtj|ƒXdS)Nr ér)Úrequest_handlerZ log_requestÚstatusÚsplitZ bytes_sentrÚclose)Úself©rú2/opt/alt/python36/lib64/python3.6/simple_server.pyr szServerHandler.closeN)Ú__name__Ú __module__Ú __qualname__Úsoftware_versionZserver_softwarerrrrrr sr c@s0eZdZdZdd„Zdd„Zdd„Zdd „ZdS) rNcCstj|ƒ|jƒdS)N)rÚ server_bindÚ setup_environ)rrrrr0s zWSGIServer.server_bindcCsFi}|_|j|d<d|d<t|jƒ|d<d|d<d|d<d|d<dS) NZ SERVER_NAMEzCGI/1.1ZGATEWAY_INTERFACEZ SERVER_PORTÚÚ REMOTE_HOSTÚCONTENT_LENGTHZ SCRIPT_NAME)Ú base_environZ server_nameÚstrZ server_port)rÚenvrrrr5s  zWSGIServer.setup_environcCs|jS)N)Ú application)rrrrÚget_app?szWSGIServer.get_appcCs ||_dS)N)r!)rr!rrrÚset_appBszWSGIServer.set_app)rrrr!rrr"r#rrrrr*s  c@s,eZdZdeZdd„Zdd„Zdd„ZdS) rz WSGIServer/cCsT|jjjƒ}|j|d<|j|d<|j|d<d|jkrH|jjddƒ\}}n |jd}}tj j |dƒ|d<||d <|j ƒ}||j d krŒ||d <|j d |d <|j jd ƒdkrº|j jƒ|d<n|j d |d<|j jdƒ}|rà||d<xn|j jƒD]`\}}|jddƒjƒ}|jƒ}||k�rqìd||k�r@|d|d|7<qì||d|<qìW|S)NZSERVER_PROTOCOLZSERVER_SOFTWAREZREQUEST_METHODú?r rz iso-8859-1Z PATH_INFOZ QUERY_STRINGrrZ REMOTE_ADDRz content-typeZ CONTENT_TYPEzcontent-lengthrú-Ú_ZHTTP_ú,)ÚserverrÚcopyÚrequest_versionÚserver_versionÚcommandÚpathrÚurllibÚparseZunquoteZaddress_stringZclient_addressZheadersÚgetZget_content_typeÚitemsÚreplaceÚupperÚstrip)rr r-ZqueryÚhostZlengthÚkÚvrrrÚ get_environKs8        zWSGIRequestHandler.get_environcCstjS)N)ÚsysÚstderr)rrrrÚ get_stderrpszWSGIRequestHandler.get_stderrcCs||jjdƒ|_t|jƒdkrrrrrrGs%cCsvddlm}|ƒ}td|d�t|d�t|jƒƒ}x$|D]\}}t|dt|ƒ|d�q:W|dd gƒ|jƒjd ƒgS) Nr)ÚStringIOz Hello world!)Úfileú=z200 OKú Content-Typeútext/plain; charset=utf-8zutf-8)rCrD)Úior@ÚprintÚsortedr1ÚreprÚgetvalueÚencode)ÚenvironZstart_responser@ÚstdoutÚhr6r7rrrr‰s     cCs|||f|ƒ}|j|ƒ|S)N)r#)r5ÚportZappZ server_classZ handler_classr(rrrr •s Ú__main__ri@zServing HTTP onrNr z...zhttp://localhost:8000/xyz?abc)Z http.serverrrr9Z urllib.parser.Zwsgiref.handlersrÚplatformrr?Ú__all__r+ÚversionrÚ sys_versionrr rrrr rZhttpdZsocketZ getsocknameZsarFZ webbrowserÚopenZhandle_requestrrrrÚ s*    B