# http_socket_client.py import socket import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s') def http_get_socket(): """HTTP GET запрос через низкоуровневый socket""" HOST = 'vyatsu.ru' PORT = 80 # HTTP запрос вручную request = f"""GET / HTTP/1.1 Host: {HOST} User-Agent: PyCharm-Socket-Client Accept: text/html Connection: close """ # Заменяем переносы строк на \r\n как требует HTTP request = request.replace('\n', '\r\n') try: # Создаем TCP соединение with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket: logging.info(f"Подключение к {HOST}:{PORT}") client_socket.connect((HOST, PORT)) logging.info("Отправка HTTP запроса...") client_socket.sendall(request.encode()) # Получаем ответ response = b'' while True: chunk = client_socket.recv(4096) if not chunk: break response += chunk # Разбираем ответ response_str = response.decode('utf-8', errors='replace') # Разделяем заголовки и тело if '\r\n\r\n' in response_str: headers, body = response_str.split('\r\n\r\n', 1) else: headers = response_str body = '' logging.info(f"Статус: {headers.split(chr(10))[0]}") logging.info(f"Заголовков получено: {len(headers)} символов") logging.info(f"Тело ответа (первые 300 символов):\n{body[:300]}") except Exception as e: logging.error(f"Ошибка: {e}") if __name__ == '__main__': http_get_socket()