Til en lille urllib3-proxydiagnose skal du bruge ProxyManager med genforsøg deaktiveret. Det rapporterer første forsøg i stedet for at bruge længere tid på en post, der ikke længere virker. I et uv-styret projekt:

uv add urllib3

Erstat dokumentationsendepunktet med en HTTP-proxy fra din tjeneste eller listen over HTTP-proxyer, og kør forespørgslen gennem den manager:

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

Læs først response.status og undersøg derefter response.data. Det er urllib3s felter; Requests-felterne status_code og text kan ikke bruges i stedet. En afvisning fra webstedet kan komme gennem en fungerende proxy. En undtagelse før et svar viser derimod, at forespørgslen ikke blev fuldført.

retries=False er et diagnostisk valg, ikke en politik for genforsøg i produktion. De 5 sekunders forbindelses- og 10 sekunders læseindstillinger begrænser hver sin fase; de giver ikke en garanteret samlet frist på 15 sekunder. DNS og fremdrift i svaret kan påvirke den samlede ventetid.

Eksemplet forudindlæser indholdet og rydder managerens forbindelsespuljer til sidst. Ved gentagne forespørgsler gennem samme endepunkt skal du beholde manageren, indtil arbejdet slutter, så forbindelser kan genbruges. Et skift til preload_content=False ændrer livscyklussen: kalderen skal læse og frigive det streamede svar.

Vælg den manager, der passer til den lyttende tjeneste. En almindelig PoolManager bliver ikke proxybevidst, fordi en URL er gemt et andet sted; SOCKS bruger urllib3.contrib.socks.SOCKSProxyManager og dens valgfrie afhængigheder. Koden ovenfor følger HTTP-ProxyManager-sporet.

Relaterede artikler