For en liten urllib3-proxydiagnose, bruk ProxyManager med nye forsøk deaktivert. Det viser første forsøk i stedet for å bruke mer tid på en oppføring som har sluttet å virke. I et prosjekt administrert med uv:

uv add urllib3

Erstatt dokumentasjonsendepunktet med en HTTP-proxy fra tjenesten din eller listen over HTTP-proxyer og kjør forespørselen 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 se deretter på response.data. Det er urllib3s felt; Requests-feltene status_code og text er ikke erstatninger. En avvisning fra nettstedet kan komme gjennom en fungerende proxy. Et unntak før et svar viser derimot at forespørselen ikke ble fullført.

retries=False er et diagnostisk valg, ikke en policy for nye forsøk i produksjon. Innstillingene på 5 sekunder for tilkobling og 10 sekunder for lesing begrenser hver sin fase; de gir ingen garantert samlet frist på 15 sekunder. DNS og fremdriften i svaret kan påvirke den totale ventetiden.

Eksemplet forhåndslaster innholdet og tømmer managerens tilkoblingspooler til slutt. Ved gjentatte forespørsler gjennom samme endepunkt, behold manageren til arbeidet er over for å gjenbruke forbindelsene. Bytte til preload_content=False endrer livssyklusen: den som kaller må lese og frigjøre det strømmede svaret.

Velg manager etter tjenesten som lytter. En vanlig PoolManager blir ikke proxybevisst fordi en URL lagres et annet sted; SOCKS bruker urllib3.contrib.socks.SOCKSProxyManager og dens valgfrie avhengigheter. Koden over følger HTTP-ProxyManager-sporet.

Relaterte artikler