Na malú diagnostiku proxy v urllib3 použite ProxyManager s vypnutým opakovaním. Zobrazí prvý pokus namiesto dlhého opakovania položky, ktorá prestala fungovať. V projekte spravovanom uv:

uv add urllib3

Dokumentačný koncový bod nahraďte HTTP proxy svojej služby alebo položkou zo zoznamu HTTP proxy a požiadavku vykonajte cez tohto správcu:

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()

Najprv čítajte response.status a potom skontrolujte response.data. To sú polia urllib3; status_code a text v štýle Requests nie sú náhradou. Odmietnutie webu môže prísť cez fungujúcu proxy. Výnimka pred odpoveďou naopak znamená, že sa požiadavku nepodarilo dokončiť.

retries=False je diagnostická voľba, nie produkčná politika opakovania. Nastavenia 5 sekúnd pre pripojenie a 10 sekúnd pre čítanie obmedzujú vlastné fázy; nedávajú spolu zaručený celkový limit 15 sekúnd. DNS a priebeh odpovede môžu ovplyvniť celkové čakanie.

Príklad vopred načíta telo a nakoniec vyčistí fondy spojení správcu. Pri opakovaných požiadavkách cez rovnaký bod ponechajte správcu do konca práce na opätovné použitie spojení. Prechod na preload_content=False mení životný cyklus: volajúci musí prúdovú odpoveď prečítať a uvoľniť.

Zvoľte správcu podľa počúvajúcej služby. Bežný PoolManager nezačne používať proxy len preto, že je URL uložené inde; SOCKS používa urllib3.contrib.socks.SOCKSProxyManager a jeho voliteľné závislosti. Vyššie uvedený kód používa cestu HTTP cez ProxyManager.

Súvisiace články