Использование cookie и прокси в одном открывателе Python urllib
Объедините ProxyHandler и HTTPCookieProcessor в одном открывателе urllib, чтобы связанные запросы через прокси использовали нужную банку cookie.
Открыватель 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 привязанными к одной операции.