Skip to content

Commit c16a162

Browse files
Add files via upload
1 parent a704774 commit c16a162

File tree

1 file changed

+44
-46
lines changed

1 file changed

+44
-46
lines changed

main.py

Lines changed: 44 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,58 @@
1-
import http.server
2-
import urllib.parse
3-
from http import HTTPStatus
4-
1+
from http.server import BaseHTTPRequestHandler, HTTPServer
2+
from urllib.parse import urlparse, parse_qs
3+
import json
54

65
class ControlMessage:
76
def __init__(self, text, number):
87
self.text = text
98
self.number = number
109

10+
def __str__(self):
11+
return f"Text: {self.text}, Number: {self.number}"
1112

12-
class AdminHandler(http.server.BaseHTTPRequestHandler):
13-
def do_POST(self):
14-
parsed_path = urllib.parse.urlparse(self.path)
15-
if parsed_path.path == "/admin":
16-
self.handle_admin_post()
17-
else:
18-
self.send_error(HTTPStatus.NOT_FOUND, "Not Found")
19-
20-
def handle_admin_post(self):
21-
content_length = int(self.headers.get("Content-Length", 0))
22-
post_data = self.rfile.read(content_length).decode("utf-8")
23-
parsed_data = urllib.parse.parse_qs(post_data)
24-
25-
text = parsed_data.get("text", [""])[0]
26-
number = parsed_data.get("number", [None])[0]
27-
28-
if not text or not number.isdigit():
29-
self.send_error(HTTPStatus.BAD_REQUEST, "Bad Request")
30-
return
31-
32-
message = ControlMessage(text, number)
33-
process_message(message)
34-
35-
self.send_response(HTTPStatus.OK)
13+
class RequestHandler(BaseHTTPRequestHandler):
14+
def do_GET(self):
15+
self.send_response(200)
3616
self.send_header("Content-type", "text/plain")
3717
self.end_headers()
18+
self.wfile.write(bytes("OK: It's a GET method or URL not in \"/admin\"", "utf-8"))
3819

39-
def process_message(message):
40-
# Print the accepted control message
41-
print("Accepted Control message, Text: {}, Number: {}".format(
42-
message.text, message.number))
43-
20+
def do_POST(self):
21+
if self.path.startswith("/admin"):
22+
content_length = int(self.headers.get("Content-Length", 0))
23+
body = self.rfile.read(content_length).decode("utf-8")
24+
params = parse_qs(body)
25+
text = params.get("text", [None])[0]
26+
number = params.get("number", [None])[0]
27+
28+
if text is None or number is None or not number.isdigit():
29+
self.send_response(400)
30+
self.send_header("Content-type", "text/plain")
31+
self.end_headers()
32+
self.wfile.write(bytes("Bad Request", "utf-8"))
33+
return
34+
35+
message = ControlMessage(text, int(number))
36+
self.send_response(200)
37+
self.send_header("Content-type", "text/plain")
38+
self.end_headers()
39+
self.wfile.write(bytes(f"OK, Accepted Control message: {message}", "utf-8"))
40+
process_message(message)
41+
else:
42+
self.send_response(200)
43+
self.send_header("Content-type", "text/plain")
44+
self.end_headers()
45+
self.wfile.write(bytes("OK: It's a GET method or URL not in \"/admin\"", "utf-8"))
4446

45-
if __name__ == "__main__":
46-
# Set up the server
47-
server_address = ("", 3020)
48-
admin_handler = AdminHandler
47+
def process_message(message):
48+
print(f"Accepted Control message: {message}")
4949

50-
httpd = http.server.HTTPServer(server_address, admin_handler)
51-
print("Server is started at http://localhost:"+str(server_address[1]))
50+
def start_server():
51+
host = "localhost"
52+
port = 3020
53+
print(f"Server is started at http://{host}:{port}")
5254

53-
try:
54-
# Start serving requests
55-
httpd.serve_forever()
56-
except KeyboardInterrupt:
57-
pass
55+
server = HTTPServer((host, port), RequestHandler)
56+
server.serve_forever()
5857

59-
# Shut down the server
60-
httpd.server_close()
58+
start_server()

0 commit comments

Comments
 (0)