Для невеликої діагностики проксі в urllib3 використовуйте ProxyManager з вимкненими повторами. Це покаже першу спробу замість тривалих повторів запису, що перестав працювати. У проєкті під керуванням uv:

uv add urllib3

Замініть документаційну кінцеву точку HTTP-проксі свого сервісу або записом зі списку HTTP-проксі і виконайте запит через цей менеджер:

import urllib3

proxy = urllib3.ProxyManager(
    "http://203.0.113.10:8080",
    timeout=urllib3.Timeout(connect=5, read=10),
    retries=False,
)

try:
    response = proxy.request("GET", "https://example.com/")
    print(response.status)
    print(response.data.decode("utf-8", errors="replace")[:200])
finally:
    proxy.clear()

Спочатку прочитайте response.status, потім перевірте response.data. Це поля urllib3; status_code та text у стилі Requests не є заміною. Відмова сайту може прийти через робочий проксі. Виняток до відповіді, натомість, означає, що запит не вдалося завершити.

retries=False — діагностичний вибір, а не політика повторів для робочого середовища. Налаштування 5 секунд на з’єднання та 10 секунд на читання обмежують власні етапи; вони не утворюють гарантованого загального строку 15 секунд. DNS і перебіг отримання відповіді можуть впливати на повне очікування.

Приклад заздалегідь завантажує тіло й наприкінці очищує пули менеджера. Для повторних запитів через ту саму точку зберігайте менеджер до кінця роботи, щоб повторно використовувати з’єднання. Перехід на preload_content=False змінює життєвий цикл: викликач мусить прочитати та звільнити потокову відповідь.

Вибирайте менеджер під сервіс, що слухає. Звичайний PoolManager не починає використовувати проксі через те, що URL збережено деінде; SOCKS використовує urllib3.contrib.socks.SOCKSProxyManager і його необов’язкові залежності. Код вище йде HTTP-шляхом ProxyManager.

Схожі статті