-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathpython-wsgi-HTTPServer.py
More file actions
81 lines (65 loc) · 2.32 KB
/
python-wsgi-HTTPServer.py
File metadata and controls
81 lines (65 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
----------------------
HTTP服务器 |
----------------------
* 类库
http.server BaseHTTPRequestHandler
* HTTP ,Handler负责接收和处理HTTP请求
http.server HTTPServer
* HTTP服务类
socketserver ThreadingMixIn
* 多线程的HTTP服务支持
* 步骤
1,创建 HTTP Handler
* 自定义类继承 BaseHTTPRequestHandler
* 覆写处理方法
2,自定义HTTP服务类,实现 ThreadingMixIn 和 HTTPServer
* 不需要覆写任何方法
3,创建 HTTP服务类实例
* 构造函数第一个参数:tuple,指定本机名和监听端口,第二个参数是自定义的 Handler 类
----------------------
HTTPServer |
----------------------
----------------------
BaseHTTPRequestHandler |
----------------------
* 获取POST的JSON请求头
request_size = int(self.headers["Content-length"])
request_body = self.rfile.read(request_size).decode(encoding='utf_8', errors='strict')
request_obj = json.loads(request_body)
----------------------
ThreadingMixIn |
----------------------
----------------------
demo |
----------------------
import threading
import urllib
from http.server import BaseHTTPRequestHandler
from http.server import HTTPServer
from socketserver import ThreadingMixIn
class Http_Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200, message=None)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write('Hello Python'.encode(encoding='utf_8', errors='strict'))
def do_POST(self):
# 响应设置
self.send_response(200, message=None)
self.send_header('Content-type', 'application/json;charset=UTF-8')
self.end_headers()
# 请求路径判断
if not self.path == '/open':
self.wfile.write(bytes(json.dumps(RESPONSE_BODY['not_found'],ensure_ascii=False),'UTF_8'))
return
# 获取POST的JSON请求体
request_size = int(self.headers["Content-length"])
request_body = self.rfile.read(request_size).decode(encoding='utf_8', errors='strict')
request_obj = json.loads(request_body)
# 响应客户端
self.wfile.write(bytes(json.dumps(RESPONSE_BODY['success'],ensure_ascii=False),'UTF_8'))
class ThreadingHttpServer(ThreadingMixIn, HTTPServer):
pass
server = ThreadingHttpServer(('localhost', 8080), Http_Handler)
server.serve_forever()
server.server_close()