a DOg3@s.ddlmZmZddlZddlZddlmZddlm Z dZ gdZ de Z e dej dZe d eZGd d d eZGd d d eZGdddeZddZeefddZedkr*eddeLZejZededdeddddlZedeWdn1s 0YdS))BaseHTTPRequestHandler HTTPServerN) SimpleHandler)python_implementationz0.2) WSGIServerWSGIRequestHandlerdemo_app make_server WSGIServer// c@seZdZeZddZdS) ServerHandlerc Cs>z,|j|jddd|jWt|n t|0dS)Nr r)request_handlerZ log_requestZstatussplitZ bytes_sentrcloseselfr:/opt/alt/python39/lib64/python3.9/wsgiref/simple_server.pyr s zServerHandler.closeN)__name__ __module__ __qualname__software_versionZserver_softwarerrrrrr sr c@s0eZdZdZddZddZddZdd ZdS) rNcCst||dSN)r server_bind setup_environrrrrr0s 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_HOSTCONTENT_LENGTHZ SCRIPT_NAME) base_environZ server_namestrZ server_port)renvrrrr5s  zWSGIServer.setup_environcCs|jSr applicationrrrrget_app?szWSGIServer.get_appcCs ||_dSrr#)rr$rrrset_appBszWSGIServer.set_app)rrrr$rrr%r&rrrrr*s  rc@s,eZdZdeZddZddZddZdS) rr cCsP|jj}|j|d<|j|d<|j|d<d|jvrH|jdd\}}n |jd}}tj |d|d<||d <| }||j d kr||d <|j d |d <|j d dur|j |d<n|j d |d<|j d}|r||d<|j D]`\}}|dd}|}||vrqd||vr>|d|d|7<q||d|<q|S)NZSERVER_PROTOCOLZSERVER_SOFTWAREZREQUEST_METHOD?rrz iso-8859-1Z PATH_INFOZ QUERY_STRINGrrZ REMOTE_ADDRz content-typeZ CONTENT_TYPEzcontent-lengthr-_ZHTTP_,)serverr copyrequest_versionserver_versioncommandpathrurllibparseZunquoteZaddress_stringZclient_addressZheadersgetZget_content_typeitemsreplaceupperstrip)rr"r0ZqueryhostZlengthkvrrr get_environKs6        zWSGIRequestHandler.get_environcCstjSr)sysstderrrrrr get_stderrpszWSGIRequestHandler.get_stderrcCs|jd|_t|jdkrr;rrunr+r%)rZhandlerrrrhandless zWSGIRequestHandler.handleN)rrr __version__r.r;r>rBrrrrrGs%rcCsrddlm}|}td|dt|dt|}|D]\}}t|dt||dq8|ddg|dgS) Nr)StringIOz Hello world!)file=z200 OK)z Content-Typeztext/plain; charset=utf-8zutf-8)iorDprintsortedr4reprgetvalueencode)environZstart_responserDstdouthr9r:rrrrs      rcCs|||f|}|||Sr)r&)r8portZappZ server_classZ handler_classr+rrrr s r __main__ri@zServing HTTP onrPrz...zhttp://localhost:8000/xyz?abc)Z http.serverrrr<Z urllib.parser1Zwsgiref.handlersrplatformrrC__all__r.versionr sys_versionrr rrrr rZhttpdZsocketZ getsocknameZsarHZ webbrowseropenZhandle_requestrrrr s,   C