Использование IP прокси с urllib3
Выберите ProxyManager для HTTP-прокси, изучите поля ответа urllib3 и учтите повторы и отдельный менеджер SOCKS.
Для небольшой диагностики прокси в 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.