Ответ
Объект requests.Session
— это инструмент для сохранения состояния и настроек между несколькими HTTP-запросами, отправленными к одному или разным хостам. Он обеспечивает персистентность данных и оптимизирует производительность.
Основные преимущества и цели использования:
-
Сохранение Cookies:
Session
автоматически управляет cookies. Если сервер устанавливает cookie в одном ответе, сессия будет автоматически отправлять их во всех последующих запросах на тот же домен. Это критически важно для аутентификации и поддержания пользовательского состояния. -
Переиспользование TCP-соединений (Connection Pooling): При выполнении нескольких запросов к одному и тому же хосту
Session
переиспользует базовое TCP-соединение. Это значительно снижает задержки, связанные с установкой нового соединения для каждого запроса (TCP handshake), и повышает производительность. -
Общие параметры запросов: Вы можете задать общие заголовки, параметры аутентификации или query-параметры для всех запросов, выполняемых в рамках одной сессии, что избавляет от дублирования кода.
Практический пример:
import requests
# Создаем сессию с использованием менеджера контекста
with requests.Session() as s:
# Устанавливаем заголовок, который будет отправляться с каждым запросом
s.headers.update({'x-custom-header': 'my-app'})
# Первый запрос для установки cookie на сервере (httpbin.org - сервис для тестирования)
s.get('https://httpbin.org/cookies/set/session_id/123456789')
# Второй запрос к тому же домену. Сессия автоматически отправит cookie обратно.
response = s.get('https://httpbin.org/cookies')
# В ответе мы увидим отправленные нами cookie и заголовок
print(response.json())
# Вывод: {'cookies': {'session_id': '123456789'}}
Использование Session
является лучшей практикой при работе с API или при веб-скрейпинге, когда требуется выполнить несколько запросов к одному и тому же хосту.