Открыватель urllib может направлять запросы через прокси и одновременно поддерживать cookie сайта. Передайте ему оба обработчика:

from http.cookiejar import CookieJar
from urllib.request import (
    HTTPCookieProcessor, ProxyHandler, build_opener,
)

cookies = CookieJar()
opener = build_opener(
    ProxyHandler({"http": "http://proxy.example:8080"}),
    HTTPCookieProcessor(cookies),
)
with opener.open("http://www.example.com/", timeout=10) as response:
    body = response.read()

В примере используется обычный HTTP-адрес назначения и его явный маршрут через прокси. Для разрешённой проверки публичного сайта без аутентификации прокси выберите кандидата из списка HTTP-прокси для этого маршрута, сохраняя нужную банку cookie. Повторно используйте opener для последующих запросов той же сессии сайта. Обработчик cookie извлекает приемлемые cookie из ответа и добавляет подходящие к следующим запросам.

Создание новой пустой CookieJar перед каждым вызовом уничтожает эту преемственность. Держите банку рядом с сессией, которую она представляет; используйте отдельные банки для учётных записей или рабочих процессов, чьи cookie должны оставаться раздельными.

Базовая CookieJar хранит состояние в памяти. Для сохранения между запусками программы выберите подходящий подкласс FileCookieJar и осознанно сохраните или загрузите его.

Для такой схемы не нужно устанавливать глобальный opener. Вызов метода open этого объекта оставляет прокси и cookie привязанными к одной операции.

Похожие статьи