Usare un IP proxy in Python Requests
Imposta in Requests percorsi proxy espliciti per richiesta, scegli lo schema corretto dell’endpoint e gestisci timeout e problemi del tunnel HTTPS.
Con Requests disponibile nel progetto, passa una mappatura dei proxy alla chiamata:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
Sostituisci l’endpoint di loopback con il tuo proxy attivo o con un candidato dalla lista dei proxy HTTP che proverai con questa richiesta. Le chiavi descrivono gli schemi di destinazione: http per gli URL HTTP e https per quelli HTTPS. I valori descrivono il listener del proxy. Possono essere endpoint diversi se la rete richiede percorsi separati.
Un valore proxy con http:// sotto la chiave https è intenzionale. Requests chiede un tunnel CONNECT al listener HTTP e poi vi stabilisce TLS con la destinazione, nel rispetto delle regole del proxy su destinazioni e porte. Cambiare il valore in https:// richiede TLS verso il proxy stesso; può fallire se il listener si aspetta HTTP in chiaro.
Che cosa significano i due valori di timeout
timeout=(5, 15) imposta i timeout di connessione e lettura. Non impone una scadenza complessiva di quindici secondi. Dati ricevuti periodicamente, più indirizzi e tentativi di connessione possono allungare il tempo trascorso. Requests non fornisce un timeout generale se ometti questa impostazione: scegli limiti adeguati alla risposta e aggiungi una scadenza nell’applicazione se il lavoro richiede un limite complessivo rigoroso.
Gestisci l’errore nella fase in cui avviene
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
Un CONNECT rifiutato può generare ProxyError prima che esista una risposta della destinazione. Il ramo HTTPError segue una risposta ricevuta con stato di errore; Timeout indica che è scaduto un limite configurato. Esamina localmente le catene di eccezioni della connessione, rimuovendo endpoint con credenziali e URL privati prima di condividerle.
Lascia attiva la verifica dei certificati. Se la rete autorizzata usa una CA privata o un’intercettazione gestita, fornisci il materiale di fiducia previsto invece di disattivare la verifica.
Le voci esplicite per richiesta controllano i percorsi indicati qui, ma gli schemi omessi possono ancora risentire del rilevamento dei proxy nell’ambiente. Trasferendo la chiamata in una Session riutilizzabile, decidi come devono interagire variabili d’ambiente, valori predefiniti di Session e sostituzioni per richiesta; riutilizzo delle connessioni e politica di instradamento sono scelte distinte.