Advertisement
Falexom

Untitled

Jul 19th, 2021
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.96 KB | None | 0 0
  1. import socket  # скелет
  2.  
  3. URLS = {
  4.     '/': 'hello index',
  5.     '/blog': 'hello blog'
  6. }
  7.  
  8.  
  9. def parse_request(request):
  10.     parsed = request.split('')  # строка запроса по пробелам
  11.     method = parsed[0]
  12.     url = parsed[1]
  13.     return(method, url)
  14.  
  15.  
  16. def generate_headers(method, url):
  17.     if not method == 'GET':
  18.         return ('HTTP/1.1 4405 METHOD NOT ALLOWED\n\n', 405)
  19.  
  20.     if not url in URLS:
  21.         return ('HTTP/1.1 404 Not found\n\n', 404)  # смотрим ассоциативный массив
  22.  
  23.     return ('HTTP/1.1 200 OK\n\n', 200)
  24.  
  25.  
  26. def generate_content(code, url):
  27.     if code == 404:
  28.         return '<h1>404</h1><p>Not found</p>'
  29.     if code == 405:
  30.         return '<h1>404</h1><p>Not allowed</p>'
  31.     return '<h1>{}</h1>'.format(URLS[url])
  32.  
  33.  
  34. def generate_response(request):
  35.     method, url = parse_request(request)
  36.     headers, code = generate_headers(method, url)  # генерируем заголовки урла
  37.     body = generate_content(method, url)
  38.     return (headers + body).encode()  # парсим
  39.  
  40.  
  41. def run():  # используем стек TCP/IP
  42.     server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # семья INET - IP, второе - TCP
  43.     server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # устанавливаем уровень сокета
  44.     server_socket.bind(('127.0.0.1', 5000))
  45.     server_socket.listen()
  46.  
  47.     while True:  # на бесконечные отношения
  48.         client_socket, addr = server_socket.accept()  # проверка получения
  49.         request = client_socket.recv(1024)  # количество байт на пакет от клиента
  50.         print(request.decode('utf-8'))
  51.         print()
  52.         print(addr)  # на адрес от клиента
  53.  
  54.         response = generate_response(request.decode('utf-8'))
  55.  
  56.         client_socket.sendall('Hi'.encode())
  57.         client_socket.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement