За малка 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 пътя.

Подобни статии