Ответ
Объект 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 или при веб-скрейпинге, когда требуется выполнить несколько запросов к одному и тому же хосту.
Ответ 18+ 🔞
Да ты посмотри, что за зверь такой — requests.Session! Это ж не просто функция, а целый аппарат для того, чтобы не ебать мозги с каждым запросом по отдельности. Представь, будто ты завёл себе личного курьера, который помнит все твои поручения и не тупит на каждом шагу.
Зачем он, этот ваш сеанс, вообще нужен?
-
Куки — не печеньки: Главный его фокус — он куки не теряет, как мы с тобой носки. Отправил один запрос, сервер тебе в ответ печеньку сунул (типа, «ты вошёл, браток»). Сессия её аккуратно в карман кладёт и при следующем звонке на тот же адрес автоматически её предъявляет. Без этого ты каждый раз как лох непонятный — «а ты кто такой? давай, до свидания».
-
Не разрывай соединение, мудила! Вот это вообще магия. Без сессии каждый твой запрос — это как новый звонок в колл-центр: «здравствуйте, соедините с отделом...». А с сессией — ты уже на прямой линии с оператором, просто говоришь следующую просьбу. TCP-соединение переиспользуется, и всё летает в разы быстрее. Экономия на рукопожатиях, ёпта!
-
Настройки на все случаи: Захотел ты ко всем запросам прилепить один и тот же заголовок (типа, «я из такого-то приложения») или добавить секретный ключ? Нехуй копипастить это в каждый
requests.get(). Настроил один раз сессию — и она сама всё прилепит, куда надо. Красота, а не жизнь.
Смотри, как это в деле выглядит:
import requests
# Открываем сессию. Это как войти в личный кабинет.
with requests.Session() as s:
# Говорим: «Слушай, ко всем письмам от моего имени прикрепляй вот эту визитку».
s.headers.update({'x-custom-header': 'my-app'})
# Первый запрос. Говорим серверу: «Запомни меня, я номер 123456789».
# Сервер в ответ: «Окей, держи куку, чувак».
s.get('https://httpbin.org/cookies/set/session_id/123456789')
# Второй запрос. Сессия уже не лох — она суёт ту самую куку в конверт и говорит:
# «Это опять я, тот самый номер 123456789, предъяви что у тебя там про меня есть».
response = s.get('https://httpbin.org/cookies')
# Смотрим ответ. Опа, а сервер-то нас узнал! И заголовок наш кастомный тоже видит.
print(response.json())
# Напечатает: {'cookies': {'session_id': '123456789'}}
Короче, если тебе нужно слать кучу запросов на один и тот же сайт (допустим, API долбить или данные парсить), то работать без сессии — это как ебаться с разными тёлками, каждый раз представляясь заново. Полный пиздец и потеря времени. Бери Session — и жизнь наладится, ёпта!