/
dilanms
/
Services
Обзор
Документация
Войти
/
dilanms
/
Services
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Socket/server_socket.py
60 строк
2 KB
Dilanms
добавление микропрограмм сокетов
05 фев 2025, 23:36
05 фев 2025, 23:36
42bd46d
Код
Авторство
О чём код?
import asyncio from urllib.parse import parse_qs, urlparse async def handle_client(reader, writer): # Чтение HTTP-запроса request = (await reader.read(1024)).decode('utf-8') #print(f"Received request:\n{request}") request_line = request.splitlines()[0] # Первая строка запроса method, path, _ = request_line.split() # Разделяем метод, путь и версию HTTP # Парсим query-параметры (если есть) parsed_url = urlparse(path) path = parsed_url.path # Чистый путь без query-параметров query_params = parse_qs(parsed_url.query) # Парсим query-параметры # Логируем запрос print(f"Получен запрос: Метод: {method}, Путь: {path} с параметрами: {query_params}") # Формирование HTTP-ответа if path == "/test": response = "HTTP/1.1 200 OK\r\n" response += "Content-Type: text/plain; charset=utf-8\r\n" response += "Connection: close\r\n" response += "Тест прошел успешно" elif path == "/api": response = "HTTP/1.1 200 OK\r\n" response += "Content-Type: text/plain; charset=utf-8\r\n" response += "Connection: close\r\n" response += "Тест прошел успешно" else: response = "HTTP/1.1 200 OK\r\n" response += "Content-Type: text/plain; charset=utf-8\r\n" response += "Connection: close\r\n" response += "Привет" # Отправка HTTP-ответа writer.write(response.encode('utf-8')) await writer.drain() # Закрытие соединения writer.close() await writer.wait_closed() async def main(): # Запуск асинхронного сервера server = await asyncio.start_server(handle_client, '127.0.0.1', 9050) # Вывод информации о запуске сервера addr = server.sockets[0].getsockname() print(f'Serving on {addr}') # Ожидание подключений async with server: await server.serve_forever() # Запуск асинхронного цикла asyncio.run(main())