Bruk proxy-IP i urllib3
Bruk ProxyManager for HTTP-proxyer, les svarfeltene til urllib3 og ta høyde for omforsøk og SOCKS sin egen manager.
Til en enkel proxytest i urllib3, bruk ProxyManager med omforsøk slått av. Da rapporteres første forsøk uten ekstra venting på en oppføring som ikke lenger fungerer. I et prosjekt styrt av uv:
uv add urllib3Sett inn en HTTP-proxy fra tjenesten din eller listen over HTTP-proxyer i stedet for dokumentasjonseksemplet, og send forespørselen med denne 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 response.status først og undersøk så response.data. Disse feltene tilhører urllib3; status_code og text fra Requests kan ikke brukes i stedet. En fungerende proxy kan formidle nettstedets avvisning. Kommer et unntak før noe svar, betyr det derimot at forespørselen ikke ble ferdig.
retries=False er valgt for diagnostikk og er ikke en omforsøkspolicy for produksjon. 5 sekunders tilkobling og 10 sekunders lesing begrenser hver sin fase, ikke en garantert total varighet på 15 sekunder. DNS og svarfremdrift kan endre den samlede ventetiden.
Eksemplet laster inn kroppen på forhånd og rydder managerens forbindelsespooler etterpå. Ved flere forespørsler til samme endepunkt, behold manageren til arbeidsmengden er fullført, slik at forbindelser kan brukes igjen. Med preload_content=False endres livssyklusen: kalleren må lese og frigi strømmesvaret.
Velg manageren som passer til den lyttende tjenesten. Et vanlig PoolManager begynner ikke å håndtere proxyer bare fordi en URL finnes et annet sted; SOCKS bruker urllib3.contrib.socks.SOCKSProxyManager med sine valgfrie avhengigheter. Koden over bruker HTTP-ProxyManager-varianten.