Користете прокси 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 патеката.