blob: d9fdc783a013a294492de0b0a9221eb7e0dfd60e (
plain)
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
|
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs
from router import run
from utils import HTTP_STATUS_CODES
class MyHTTPRequestHandler(BaseHTTPRequestHandler):
def _set_response(self, code):
self.send_response(code)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
self.finalize_request(run({
'url': self.path,
'method': 'GET',
'query': {}
}))
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = parse_qs(self.rfile.read(content_length).decode('utf-8'))
for key in post_data:
post_data[key] = post_data[key][0]
self.finalize_request(run({
'url': self.path,
'method': 'POST',
'query': post_data
}))
def finalize_request(self, response):
if isinstance(response, int):
self._set_response(response)
response = f'<center><h1>ERROR {response} {HTTP_STATUS_CODES[response].upper()}</h1></center>'
else:
self._set_response(200)
self.wfile.write(response.encode('utf-8'))
def start_server(host, port):
server_address = (host, port)
httpd = HTTPServer(server_address, MyHTTPRequestHandler)
httpd.serve_forever()
|