Usa un IP proxy con urllib3
Scegli ProxyManager per un proxy HTTP, controlla i campi di risposta di urllib3 e considera tentativi ripetuti e gestore SOCKS separato.
Per una piccola diagnosi proxy con urllib3, usa ProxyManager con i tentativi ripetuti disabilitati. Così ottieni il primo tentativo invece di attendere ulteriori prove di una voce che ha smesso di funzionare. In un progetto gestito da uv:
uv add urllib3Sostituisci l’endpoint di documentazione con un proxy HTTP del tuo servizio o della lista dei proxy HTTP ed esegui la richiesta tramite quel gestore:
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()
Leggi prima response.status, poi esamina response.data. Sono i campi di urllib3; status_code e text in stile Requests non sono sostituti. Un rifiuto del sito può arrivare attraverso un proxy funzionante. Un’eccezione prima di una risposta indica invece l’impossibilità di completare la richiesta.
retries=False è una scelta diagnostica, non una politica di tentativi per la produzione. Le impostazioni di connessione di 5 secondi e lettura di 10 secondi limitano le rispettive fasi; non equivalgono a una scadenza complessiva garantita di 15 secondi. DNS e avanzamento della risposta possono influire sull’attesa totale.
L’esempio precarica il corpo e svuota alla fine i pool del gestore. Per richieste ripetute allo stesso endpoint, conserva quel gestore fino al termine del lavoro per riutilizzare le connessioni. Passare a preload_content=False cambia il ciclo di vita: il chiamante deve leggere e rilasciare la risposta in streaming.
Scegli il gestore in base al servizio in ascolto. Un normale PoolManager non diventa consapevole del proxy perché un URL è memorizzato altrove; SOCKS usa urllib3.contrib.socks.SOCKSProxyManager e le sue dipendenze opzionali. Il codice sopra segue il percorso HTTP di ProxyManager.