Използвайте прокси 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 пътя.