Create Response class
This commit is contained in:
parent
6daf9ab0b2
commit
742d62aa71
2 changed files with 52 additions and 11 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
|
__pycache__/
|
||||||
*.log
|
*.log
|
||||||
*.swp
|
*.swp
|
||||||
|
|
62
__main__.py
62
__main__.py
|
@ -9,6 +9,32 @@ import config
|
||||||
|
|
||||||
MAX_REQLINE = 64 * 1024
|
MAX_REQLINE = 64 * 1024
|
||||||
|
|
||||||
|
STATUS_CODE = {
|
||||||
|
200: "OK",
|
||||||
|
404: "Not Found",
|
||||||
|
500: "Internal Server Error",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Response:
|
||||||
|
def __init__(self, status_code=200, additional_headers={}, data=None):
|
||||||
|
self.status_code = status_code
|
||||||
|
self.additional_headers = additional_headers
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
def get(self):
|
||||||
|
resp = f"HTTP/1.1 {self.status_code} {STATUS_CODE[self.status_code]}\r\n"
|
||||||
|
resp += "Server: cnserv\r\n"
|
||||||
|
resp += "Connection: close\r\n"
|
||||||
|
resp += "\r\n"
|
||||||
|
|
||||||
|
resp = resp.encode("UTF-8")
|
||||||
|
|
||||||
|
if self.data:
|
||||||
|
resp += self.data
|
||||||
|
|
||||||
|
return resp
|
||||||
|
|
||||||
|
|
||||||
class HTTPHandler:
|
class HTTPHandler:
|
||||||
http_type = ""
|
http_type = ""
|
||||||
|
@ -72,10 +98,10 @@ class HTTPHandler:
|
||||||
else:
|
else:
|
||||||
decoded_data = raw.decode("UTF-8").rstrip("\r\n")
|
decoded_data = raw.decode("UTF-8").rstrip("\r\n")
|
||||||
decoded_data_split = decoded_data.split(":", 1)
|
decoded_data_split = decoded_data.split(":", 1)
|
||||||
self.headers.update({decoded_data_split[0]: decoded_data_split[1]})
|
self.headers.update({decoded_data_split[0]: decoded_data_split[1].strip(" ")})
|
||||||
|
|
||||||
def http_data_handle(self):
|
def http_data_handle(self):
|
||||||
# Get from headers Content-Length and get body from request
|
# TODO: Get from headers Content-Length and get body from request
|
||||||
"""
|
"""
|
||||||
|
|
||||||
raw = self.read_fb.readline(1024)
|
raw = self.read_fb.readline(1024)
|
||||||
|
@ -90,21 +116,35 @@ class HTTPHandler:
|
||||||
raw = self.read_fb.readline(1024)
|
raw = self.read_fb.readline(1024)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
print(self.http_type)
|
logging.debug(self.http_type)
|
||||||
print(self.http_address)
|
logging.debug(self.http_address)
|
||||||
print(self.headers)
|
logging.debug(self.headers)
|
||||||
print(self.data)
|
logging.debug(self.data)
|
||||||
|
|
||||||
self.send_form_data()
|
self.send_form_data()
|
||||||
|
|
||||||
def send_form_data(self):
|
def send_form_data(self):
|
||||||
if self.http_address == "/" and self.http_type == "GET":
|
if self.http_type == "GET":
|
||||||
self.write_fb.write(b"HTTP/1.1 200 OK\r\nConnection: close\r\nServer: cnserv\r\n\r\nTested!")
|
if self.http_address == "/":
|
||||||
|
r = Response(data=b"Tested!")
|
||||||
|
self.write_fb.write(r.get())
|
||||||
|
|
||||||
|
elif self.http_address == "/server-status":
|
||||||
|
form_data = "{\"server-name\": \"cnserv\", \"state\": \"running\"}"
|
||||||
|
r = Response(data=form_data.encode("UTF-8"))
|
||||||
|
self.write_fb.write(r.get())
|
||||||
|
|
||||||
|
else:
|
||||||
|
form_data = "Not found!"
|
||||||
|
r = Response(status_code=404, data=form_data.encode("UTF-8"))
|
||||||
|
self.write_fb.write(r.get())
|
||||||
|
|
||||||
self.write_fb.flush()
|
self.write_fb.flush()
|
||||||
|
|
||||||
self.write_fb.close()
|
self.write_fb.close()
|
||||||
self.read_fb.close()
|
self.read_fb.close()
|
||||||
self.conn.close()
|
self.conn.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
logging.basicConfig(filename="main.log", filemode="a", encoding="UTF-8",
|
logging.basicConfig(filename="main.log", filemode="a", encoding="UTF-8",
|
||||||
|
|
Loading…
Reference in a new issue