Для небольшой диагностики прокси в 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.

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