Skip to content

Vl4dIn1/HTTP-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HTTP-клиент на сокетах

Это учебный проект, демонстрирующий создание простого HTTP-клиента с использованием стандартной библиотеки Python (socket). Скрипт способен выполнять базовые веб-запросы, обрабатывать ответы и сохранять результаты в файл.

Основные возможности

  • Поддержка HTTP и HTTPS: Клиент автоматически определяет схему (http или https://) и устанавливает соответствующее соединение (обычное или защищенное с помощью SSL).
  • Методы GET и POST: Возможность отправлять как простые GET-запросы для получения данных, так и POST-запросы с телом.
  • Обработка Redirect'ов: Автоматическое следование за перенаправлениями (коды ответа 3xx, например, 302 Found).
  • Работа с Cookies: Клиент умеет отправлять куки (Cookie) и получать новые (Set-Cookie), сохраняя их между редиректами.
  • Декодирование chunked-ответов: Корректная обработка потоковых ответов, передаваемых по частям (Transfer-Encoding: chunked).
  • Сохранение результата: Тело ответа сервера сохраняется в указанный файл в виде байтов, что позволяет работать с любым контентом (HTML, JSON, изображения и т.д.).

Как использовать

Основная логика заключена в функции get_do в файле http_client.py. Чтобы использовать клиент, импортируйте эту функцию в свой скрипт.

Пример 1: Простой GET-запрос

# Импортируем нашу функцию
from http_client import get_do

# URL, который мы хотим запросить
url = "https://httpbin.org/html"
output_file = "result.html"

print(f"Запрашиваем {url}...")

# Выполняем запрос
cookies = get_do(
    url=url,
    method="GET",
    headers={},
    body="",
    timeout=10,
    file_name=output_file,
    cookie={}
)

print(f"Ответ сохранен в файл: {output_file}")
print(f"Полученные куки: {cookies}")

Пример 2: Запрос с редиректом и куками

Этот пример демонстрирует, как клиент сначала получит редирект, а затем автоматически перейдет по новому адресу, сохранив куки.

from http_client import get_do

# Этот URL сначала установит куки, а затем перенаправит на /cookies
url = "https://httpbin.org/cookies/set?my_cookie=12345"
output_file = "cookies_result.json"

print("Выполняем запрос с редиректом...")

final_cookies = get_do(
    url=url,
    method="GET",
    headers={},
    body="",
    timeout=10,
    file_name=output_file,
    cookie={'initial_cookie': 'hello'} # Можем отправить начальные куки
)

print(f"Ответ сохранен в файл: {output_file}")
print(f"Итоговые куки после всех переходов: {final_cookies}")
# Ожидаемый вывод кук: {'initial_cookie': 'hello', 'my_cookie': '12345'}

Описание функции get_do

def get_do(url: str, headers: dict, body: str, method: str, timeout: float, file_name: str, cookie: dict) -> dict:

Параметры:

  • url (str): Полный URL-адрес для запроса (например, "https://example.com/path").
  • headers (dict): Словарь с заголовками запроса (например, {'User-Agent': 'MyClient/1.0'}).
  • body (str): Тело запроса, используется для POST. Для GET передается пустая строка.
  • method (str): HTTP-метод, 'GET' или 'POST'.
  • timeout (float): Время ожидания ответа от сервера в секундах.
  • file_name (str): Имя файла, в который будет сохранено тело ответа.
  • cookie (dict): Словарь с куками для отправки на сервер.

Возвращает:

  • dict: Словарь, содержащий все куки, полученные от сервера в ходе выполнения запроса и всех редиректов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages