Använd en proxy-IP med urllib3
Välj ProxyManager för en HTTP-proxy, granska urllib3s svarsfält och ta hänsyn till omförsök och SOCKS separata hanterare.
För en liten urllib3-proxydiagnos, använd ProxyManager med omförsök avstängda. Det redovisar första försöket i stället för att lägga mer tid på en post som slutat fungera. I ett uv-hanterat projekt:
uv add urllib3Ersätt dokumentationsändpunkten med en HTTP-proxy från din tjänst eller listan med HTTP-proxyer och kör begäran genom den hanteraren:
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 och granska sedan response.data. Det är urllib3s fält; Requests-fälten status_code och text är inga ersättare. Ett avslag från webbplatsen kan komma genom en fungerande proxy. Ett undantag före svar betyder däremot att begäran inte kunde slutföras.
retries=False är ett diagnostiskt val, ingen omförsökspolicy för produktion. Inställningarna 5 sekunders anslutning och 10 sekunders läsning begränsar var sin fas; de ger ingen garanterad total tidsgräns på 15 sekunder. DNS och svarets framsteg kan påverka den totala väntan.
Exemplet förladdar innehållet och tömmer hanterarens anslutningspooler på slutet. Vid upprepade begäranden via samma ändpunkt, behåll hanteraren tills arbetet slutar så att anslutningarna kan återanvändas. Byte till preload_content=False ändrar livscykeln: anroparen måste läsa och frigöra det strömmade svaret.
Välj hanterare efter den lyssnande tjänsten. En vanlig PoolManager börjar inte använda proxy för att en URL lagrats någon annanstans; SOCKS använder urllib3.contrib.socks.SOCKSProxyManager och dess valfria beroenden. Koden ovan följer HTTP-ProxyManager-vägen.