Guida Python · 2 min di lettura

Come utilizzare i proxy con le richieste Python

La libreria delle richieste instrada il traffico attraverso un proxy con un piccolo dizionario — ma lo schema che scegli decide se il tuo DNS e l'IP di origine rimangono nascosti. Ecco la versione pratica, con codice completamente eseguibile.

Il dizionario dei proxy e perché lo schema è importante

La libreria requests di Python comunica con un proxy attraverso un singolo dizionario. Le chiavi non sono il protocollo del proxy — sono lo schema dell'URL target. Quindi {"http": ..., "https": ...} indica a requests quale proxy utilizzare quando la destinazione è un sito HTTP o HTTPS, e in pratica entrambe le chiavi puntano allo stesso endpoint.

Ciò che cambia realmente la tua privacy è lo schema all'interno dell'URL del proxy. Con socks5:// il tuo computer risolve prima il DNS e poi si connette attraverso il proxy, il che può rivelare i nomi host che visiti. Con socks5h:// il proxy risolve il DNS per te, quindi il nome host di destinazione non lascia mai il tuo computer in chiaro. Per un proxy s4m.online autenticato, preferisci socks5h per mantenere il DNS remoto e meglio nascondere il tuo IP di origine.

Schema del proxyDNS risolto daPortaInstalla
socks5h://Proxy (remoto)1080requests[socks]
socks5://Il tuo computer (locale)1080requests[socks]
http://Proxy3128Richieste stock

Il supporto SOCKS richiede PySocks (pip install "requests[socks]"); l'endpoint HTTP funziona con un'installazione stock. I proxy s4m sono datacenter SOCKS5 e HTTP, fatturati per gigabyte — vedi prezzi. Se hai solo bisogno di endpoint usa e getta per test rapidi, la lista di proxy pubblici gratuiti è un pool separato di terze parti (utilizza a tuo rischio). Stai scegliendo tra un tunnel completo e un proxy? Leggi il confronto, la panoramica VPN, o ulteriori guide.

Esempio completo eseguibile

Sostituisci USER:PASS con le tue credenziali proxy. Questo controlla il tuo IP di uscita, riutilizza una sessione, quindi ruota attraverso un piccolo pool con timeout e ripetizioni.

python
import random
import requests
from requests.exceptions import RequestException

# --- Credentials & endpoints (replace with your s4m.online proxy user) ---
USER = "USER"
PASS = "PASS"
HOST = "proxy.s4m.online"

# SOCKS5 with REMOTE DNS (socks5h) — needs: pip install "requests[socks]"
SOCKS5 = f"socks5h://{USER}:{PASS}@{HOST}:1080"
# Plain HTTP CONNECT proxy — works with a stock requests install
HTTP   = f"http://{USER}:{PASS}@{HOST}:3128"

def proxies_for(proxy_url):
    # The "http"/"https" keys are the scheme of the TARGET url,
    # not the proxy's protocol — both can point at one proxy.
    return {"http": proxy_url, "https": proxy_url}

def check_ip(session, proxy):
    r = session.get(
        "https://api.ipify.org?format=json",
        proxies=proxies_for(proxy),
        timeout=(5, 15),   # (connect, read) seconds
    )
    r.raise_for_status()
    return r.json()["ip"]

# --- Per-session config: pools connections, keeps cookies/headers ---
with requests.Session() as s:
    s.headers.update({"User-Agent": "s4m-example/1.0"})
    print("Exit IP:", check_ip(s, SOCKS5))

# --- Rotate across a list, retrying on failure ---
POOL = [SOCKS5, HTTP]

def fetch(url, retries=3):
    last_err = None
    for attempt in range(1, retries + 1):
        proxy = random.choice(POOL)
        try:
            with requests.Session() as s:
                r = s.get(url, proxies=proxies_for(proxy), timeout=(5, 15))
                r.raise_for_status()
                return r
        except RequestException as e:
            last_err = e
            print(f"[{attempt}/{retries}] {proxy} failed: {e}")
    raise last_err

resp = fetch("https://httpbin.org/ip")
print(resp.json())

Per richiesta, per sessione o globale

Per richiesta

Passa proxies= a ogni chiamata: requests.get(url, proxies=proxies_for(SOCKS5), timeout=10). La forma più esplicita e la più facile da scambiare o ruotare su base di chiamata.

Per sessione

Impostalo una volta con session.proxies = proxies_for(SOCKS5). Ogni richiesta effettuata tramite quella Session eredita il proxy e riutilizza le connessioni TCP, che è più veloce di un nuovo get() ogni volta.

Globale tramite ambiente

le richieste rispettano HTTP_PROXY, HTTPS_PROXY e ALL_PROXY. Esporta ALL_PROXY=socks5h://USER:PASS@proxy.s4m.online:1080 e ogni richiesta viene instradata senza modifiche al codice. Usa NO_PROXY per escludere host, o trust_env=False su una Session per ignorare l'ambiente.

Cose che confondono le persone

L'autenticazione va nell'URL

Metti USER:PASS@ direttamente nell'URL del proxy e le richieste invieranno le credenziali per te. Se la tua password contiene caratteri @, : o /, codificala prima con urllib.parse.quote.

Mantieni DNS remoto

socks5 risolve i nomi host sulla tua macchina; socks5h li risolve al proxy. Usa socks5h quando l'obiettivo è mantenere le tue ricerche e l'IP di origine lontano dai radar del target.

Riutilizza una sessione

Una requests.Session gestisce le connessioni e persiste i cookie, quindi un'improvvisa serie di richieste attraverso un proxy è notevolmente più veloce rispetto a chiamare requests.get() a freddo ogni volta.

Lascia attivata la verifica TLS

Un proxy inoltra solo il tuo traffico — non è un motivo per impostare verify=False. Mantieni la verifica del certificato abilitata affinché un intermediario non possa manomettere silenziosamente le risposte HTTPS.

FAQ

Domande, risposte

I proxy SOCKS5 necessitano di un pacchetto extra?

Sì. requests ha bisogno di PySocks per il supporto SOCKS: installalo con pip install "requests[socks]". L'endpoint HTTP sulla porta 3128 funziona con un'installazione standard di requests e senza dipendenze aggiuntive.

Qual è la differenza tra socks5 e socks5h?

Riguarda dove viene risolto il DNS. socks5:// risolve il nome host di destinazione sulla tua macchina prima di connettersi; socks5h:// chiede al proxy di risolverlo. Usa socks5h per evitare di rivelare i nomi host che visiti.

Perché il mio IP di uscita non cambia quando ruoto?

Di solito il dizionario dei proxy non viene effettivamente applicato, o una singola Sessione riutilizza una connessione upstream. Conferma che ogni richiesta passi proxies=, costruisci una nuova Sessione per proxy quando ruoti e stampa la risposta da un endpoint IP-echo per verificare.

Questi sono IP residenziali?

No. I proxy s4m sono endpoint SOCKS5 e HTTP datacenter, autenticati con un nome utente e una password e misurati per gigabyte. La lista di proxy pubblici gratuita separata è di terze parti e non convalidata per uso in produzione.

Come posso saltare un proxy non funzionante in una lista?

Avvolgi ogni tentativo in try/except requests.exceptions.RequestException, quindi riprova con il prossimo proxy dal tuo pool. L'esempio eseguibile sopra fa esattamente questo con un piccolo ciclo di retry.

Proxy costruiti per nascondere il tuo IP di origine

Proxy SOCKS5 e HTTP autenticati da datacenter, pagamento a consumo, con un'opzione di IP personale dedicato. Invia richieste a proxy.s4m.online e vai.

Le persone hanno trovato questa pagina cercando

Frasi di ricerca reali a cui questa pagina risponde — i collegamenti aprono la pagina che le tratta in dettaglio.