Використання 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.