Egy rövid urllib3-proxydiagnosztikához használd az ProxyManager osztályt kikapcsolt újrapróbálkozással. Így az első kísérlet eredményét kapod, nem töltesz több időt egy már nem működő bejegyzéssel. Egy uv-val kezelt projektben:

uv add urllib3

Cseréld a dokumentációs végpontot a szolgáltatód HTTP-proxyjára vagy a HTTP-proxyk listájának egyik bejegyzésére, és ezen a kezelőn át hajtsd végre a kérést:

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

Először az response.status értékét olvasd, majd vizsgáld az response.data mezőt. Ezek az urllib3 mezői; a Requests-féle status_code és text nem helyettesíti őket. A webhely elutasítása működő proxyn keresztül is megérkezhet. A válasz előtti kivétel viszont azt jelzi, hogy a kérést nem sikerült befejezni.

Az retries=False diagnosztikai választás, nem éles újrapróbálkozási szabály. Az 5 másodperces kapcsolódási és 10 másodperces olvasási beállítás a saját szakaszát korlátozza; nem ad garantált 15 másodperces teljes határidőt. A DNS és a válasz előrehaladása is befolyásolhatja a teljes várakozást.

A példa előre betölti a törzset, és végül kiüríti a kezelő kapcsolatkészleteit. Azonos végponton át ismételt kéréseknél tartsd meg a kezelőt a munka végéig a kapcsolatok újrahasználatához. Az preload_content=False megváltoztatja az életciklust: a hívónak kell elolvasnia és felszabadítania a streamelt választ.

A figyelő szolgáltatáshoz illő kezelőt válaszd. Egy szokásos PoolManager nem kezd proxyt használni attól, hogy máshol tárolsz egy URL-t; a SOCKS az urllib3.contrib.socks.SOCKSProxyManager osztályt és opcionális függőségeit használja. A fenti kód a HTTP ProxyManager útját követi.

Kapcsolódó cikkek