Відкривач 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 прив'язаними до однієї операції.

Схожі статті