Введение в requests sessions

Упрощенно говоря, сессия в контексте работы с HTTP – полезный механизм, который позволяет сохранять определенный набор данных между отдельными запросами. В первую очередь, это позволяет улучшить общую производительность кода. Разница особенно заметна при работе с большим количеством запросов.

Применение Request Sessions

Сессии requests полезны в следующих сценариях

Постоянство cookies. Куки автоматически сохраняются между запросами, что удобно при работе с сайтами, которые требуют аутентификации, в этом случае авторизация не пропадает.

Пулы соединений. Сессии позволяют эффективно управлять пулами соединения, сильно повышая эффективность при большом количестве запросов к одному хосту.

Конфигурация. Сессии дают возможность централизованно настроить основные параметры запросов, включая таймауты, заголовки, прокси. Это заметно упрощает работу с ними.

Когда не стоит использовать Request Sessions

Разовые запросы. Если необходимо сделать только один запрос, добавление сессии может быть избыточным. Проще использовать функционал на уровне конкретного модуля, например, requests.get() или requests.post().

Нет необходимости в постоянстве. Если режим работы не требует постоянства в параметрах, отпадает необходимость использовать и настраивать сессии.

Пример использования:

import requests

# Создание объекта сессии
session = requests.Session()

# Установка заголовков для сессии
session.headers.update({'User-Agent': 'my_parser'})

# Отправка запроса через объект сессии
response = session.get('https://example.com')

# Доступ к тексту ответа
print(session.headers['User-Agent'])

В данном примере создается новый объект сессии, после чего устанавливается нужный заголовок User-Agent. Далее отправляется GET-запрос к сайту. Все последующие запросы будут использовать первоначально установленный заголовок.

Повторное использование соединений

Оба варианта кода имеют схожий функционал – отправляют запросы на сайт и засекают время обработки. Однако реализация различна.

# Код с сессией

import requests
import time

# Создание объекта сессии
session = requests.Session()

# Измерение времени выполнения запросов с переиспользованием соединения
start_time = time.time()

for _ in range(10):
    response = session.get('https://example.com')
end_time = time.time()
print(f'Время выполнения с переиспользованием соединения: {end_time - start_time}')

Создается новая сессия, которая позволяет переиспользовать соединение, ускоряя взаимодействие с сайтом.

# Код без сессии

import requests
import time

# Измерение времени выполнения запросов
start_time = time.time()
for _ in range(10):
    response = requests.get('https://example.com')
end_time = time.time()
print(f'Время выполнения: {end_time - start_time}')

Во втором случае для каждого нового запроса создается новое соединение, что требует определенного времени. Этим и обусловлено увеличение общего времени обработки.

Если изначально планируется использовать большое количество запросов, лучше сразу заложить в код использование сессий. В дальнейшем это позволит сократить время работы и сэкономить на аппаратных ресурсах.



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: