server.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #https://www.youtube.com/watch?v=4haMUvUxUJI
  2. import socket
  3. PORT = 5012
  4. HOST = "localhost"
  5. URLS = {
  6. "/": "Home Page",
  7. "/blog": "Blog Page"
  8. }
  9. ERRORS = {
  10. "404": "Method not allowed",
  11. "405": "Not Found"
  12. }
  13. def parse_request(request):
  14. parsed = request.split(" ")
  15. method = parsed[0]
  16. url = parsed[1]
  17. return (method, url)
  18. def generate_headers(method, url):
  19. header_template = "HTTP/1.1 {} {}\n\n"
  20. if not method == "GET":
  21. # так нельзя делать. Если это будет рендериться на странице
  22. return (f"HTTP/1.1 405 Method {method} not allowed\n\n", 405)
  23. if not url in URLS:
  24. return ("HTTP/1.1 404 Resorce [{url}] Not found\n\n", 404)
  25. return ("HTTP/1.1 200 OK\n\n", 200)
  26. def generate_content(code, url):
  27. if code == 404:
  28. def generate_response(request):
  29. method, url = parse_request(request)
  30. headers, code = generate_headers(method, url)
  31. body = gener
  32. return (headers + body).encode()
  33. def run():
  34. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  35. server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  36. server_socket.bind((HOST, PORT))
  37. server_socket.listen()
  38. while True:
  39. client_socket, addr = server_socket.accept()
  40. request = client_socket.recv(1024)
  41. print(addr)
  42. print(request.decode("utf-8"))
  43. print()
  44. response = generate_response(request.decode("utf-8"))
  45. client_socket.sendall(response)
  46. client_socket.close()
  47. if __name__ == "__main__":
  48. print(f"Server running on http://{HOST}:{PORT}")
  49. run()