For ein liten urllib3-proxydiagnose, bruk ProxyManager med nye forsøk deaktiverte. Det viser første forsøk i staden for å bruke meir tid på ei oppføring som har slutta å verke. I eit prosjekt administrert med uv:

uv add urllib3

Erstatt dokumentasjonsendepunktet med ein HTTP-proxy frå tenesta di eller lista over HTTP-proxyar og køyr førespurnaden gjennom den manageren:

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

Les først response.status og sjå deretter på response.data. Det er felta til urllib3; Requests-felta status_code og text er ikkje erstatningar. Ei avvising frå nettstaden kan kome gjennom ein fungerande proxy. Eit unntak før eit svar viser derimot at førespurnaden ikkje vart fullført.

retries=False er eit diagnostisk val, ikkje ein politikk for nye forsøk i produksjon. Innstillingane på 5 sekund for tilkopling og 10 sekund for lesing avgrensar kvar sin fase; dei gjev inga garantert samla frist på 15 sekund. DNS og framdrifta i svaret kan påverke den totale ventetida.

Dømet førehandslastar innhaldet og tømmer tilkoplingspoolane til manageren til slutt. Ved gjentekne førespurnader gjennom same endepunkt, hald på manageren til arbeidet er over for å bruke sambanda om att. Byte til preload_content=False endrar livssyklusen: den som kallar må lese og frigje det strøymde svaret.

Vel manager etter tenesta som lyttar. Ein vanleg PoolManager vert ikkje proxybevisst fordi ei URL vert lagra ein annan stad; SOCKS brukar urllib3.contrib.socks.SOCKSProxyManager og dei valfrie avhengnadene. Koden over følgjer HTTP-ProxyManager-sporet.

Relaterte artiklar