Bruk en proxy-IP med urllib3
Velg ProxyManager for en HTTP-proxy, se på urllib3s svarfelt og ta hensyn til nye forsøk og SOCKS’ separate manager.
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 urllib3Erstatt 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.