Fes servir una IP proxy amb urllib3
Tria ProxyManager per a un proxy HTTP, inspecciona els camps de resposta d’urllib3 i considera els reintents i el gestor separat de SOCKS.
Per a una petita diagnosi de proxy amb urllib3, utilitza ProxyManager amb els reintents desactivats. Així s’informa del primer intent, sense perdre més temps reintentant una entrada que ha deixat de funcionar. En un projecte gestionat amb uv:
uv add urllib3Substitueix el punt de documentació per un proxy HTTP del teu servei o de la llista de proxys HTTP i envia la petició mitjançant aquell gestor:
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()
Llegeix primer response.status i després inspecciona response.data. Són els camps d’urllib3; status_code i text a l’estil de Requests no els substitueixen. El rebuig d’un lloc pot arribar a través d’un proxy funcional. En canvi, una excepció abans d’obtenir resposta indica que no s’ha pogut completar la petició.
retries=False és una elecció de diagnosi, no una política de reintents de producció. Els ajustos de connexió de 5 segons i de lectura de 10 segons limiten les seves fases respectives; no sumen un termini total garantit de 15 segons. El DNS i el progrés de la resposta poden afectar l’espera total.
L’exemple precarrega el cos i buida les agrupacions de connexions del gestor al final. Per a peticions repetides pel mateix punt, conserva aquell gestor fins al final de la feina perquè es puguin reutilitzar les connexions. Passar a preload_content=False canvia aquest cicle: qui fa la crida ha de llegir i alliberar la resposta en flux.
Tria el gestor que correspongui al servei que escolta. Un PoolManager normal no passa a gestionar proxys perquè hi hagi un URL desat en un altre lloc; SOCKS fa servir urllib3.contrib.socks.SOCKSProxyManager i les seves dependències opcionals. El codi anterior segueix la via HTTP de ProxyManager.