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

Поврзани статии