Integrazioni · Principiante

Come utilizzare i proxy con richieste Python, httpx e aiohttp

Tre righe di configurazione per libreria, quindi la stessa sintassi del nome utente ovunque: paese, città e sessione vivono nell'URL del proxy, quindi un gateway serve ogni lavoro.

3 minuti di lettura 6 sezioni Verificato Redazione Proxy Cyber

L'URL proxy#

Ogni libreria HTTP Python prende un proxy come URL. Con Proxy Cyber l'URL porta le credenziali e il parametri di targeting nel nome utente; il nome host è il gateway e la porta sceglie il protocollo.

URL proxy
# Rotating: a new United States household on every new connection
http://USER-cc-us:PASS@res.proxy-cyber.com:9000

# Sticky: one Berlin household held for 30 minutes under the id "job42"
http://USER-cc-de-city-berlin-sid-job42-ttl-30m:PASS@res.proxy-cyber.com:9000

# SOCKS5 with remote DNS (socks5h), same parameters
socks5h://USER-cc-us:PASS@res.proxy-cyber.com:9001

richieste#

Il riutilizzo della connessione e l'assegnazione dell'IP sono controlli diversi. Una sessione client riutilizza i socket; solo il gateway assegnato determina la rotazione e il comportamento della sessione permanente. Utilizza i parametri di sessione forniti con il tuo servizio e verifica l'uscita su più richieste. La chiusura di un socket o l'invio di Connection: close non garantisce un IP diverso.

richieste
import requests

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
proxies = {"http": PROXY, "https": PROXY}

# One request, one exit
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)

# A sticky flow: same exit for every request of this session
sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000"
s = requests.Session()
s.proxies = {"http": sticky, "https": sticky}
s.get("https://example.com/product/1", timeout=30)
s.post("https://example.com/cart", json={"id": 1}, timeout=30)

httpx#

httpx richiede un singolo proxy= argomento (versioni precedenti: proxies=). Supporta HTTP/2 alla destinazione attraverso il tunnel CONNECT e funziona allo stesso modo nel codice asincrono.

httpx
import httpx

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

with httpx.Client(proxy=PROXY, timeout=30) as client:
    print(client.get("https://api.ipify.org").text)

# async, one sticky exit per task
import asyncio

async def fetch(sid: str, url: str) -> str:
    proxy = f"http://USER-cc-us-sid-{sid}-ttl-10m:PASS@res.proxy-cyber.com:9000"
    async with httpx.AsyncClient(proxy=proxy, timeout=30) as client:
        return (await client.get(url)).text

asyncio.run(fetch("task1", "https://api.ipify.org"))

aiothttp#

aiohttp accetta il proxy per richiesta o per sessione e parla nativamente i proxy HTTP; SOCKS5 ha bisogno di aiohttp-socks connettore.

aiothttp
import aiohttp, asyncio

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://api.ipify.org", proxy=PROXY, timeout=aiohttp.ClientTimeout(total=30)) as r:
            print(await r.text())

asyncio.run(main())

Rotazione, keep-alive e tentativi#

  • Una nuova connessione TCP è una nuova connessione di trasporto, non la prova di una nuova uscita. La modalità di rotazione assegnata al gateway decide come viene instradata la connessione.
  • Utilizza un identificatore di sessione distinto per ciascun flusso di lavoro indipendente, laddove il gateway assegnato lo supporti. Conferma la durata consentita e i parametri di posizione nei dettagli della connessione. Un dispositivo residenziale può disconnettersi prima della durata richiesta; una sessione persistente non è garanzia dello stesso IP per giorni. Per un indirizzo fisso, confronta un prodotto statico dedicato.
  • Classificare la risposta prima di riprovare. Un 403 può indicare una regola di accesso che un altro IP non risolverà. Per 429, rispettare Retry-After e ridurre il tasso di richieste; utilizzare il backoff limitato per connessioni temporanee o errori del server. Riprovare le operazioni di modifica dello stato solo quando è possibile evitare azioni duplicate.
  • Imposta i timeout sul tipo di uscita: 15 s di connessione e 45 s di lettura per residenziale, di più per mobile.

Risparmiare gigabyte#

Il traffico residenziale viene fatturato per GB in entrambe le direzioni. Richiedi risposte compresse (Accept-Encoding: gzip, br è attivo per impostazione predefinita in queste librerie), preferisci gli endpoint JSON all'HTML e non scaricare mai immagini, caratteri o contenuti multimediali a meno che non siano dati. Una pagina da 350 KB costa poco; una pagina da 4 MB con risorse non lo è.

Domande che le persone fanno#

Perché continuo a ricevere lo stesso IP con le richieste?

Gli IP ripetuti possono derivare dal pool di connessioni, da una sessione permanente attiva o dal pool disponibile. Confronta la modalità di routing assegnata e testa diverse richieste con timestamp. Una richiesta.Sessione gestisce connessioni e cookie; non seleziona esso stesso l'uscita proxy.

Ho bisogno di un proxy diverso per i siti HTTPS?

No. Lo stesso URL proxy http:// gestisce le destinazioni HTTPS tramite un tunnel CONNECT; TLS viene eseguito end-to-end tra il codice e il sito.

Posso utilizzare lo stesso codice per i proxy mobili?

Sì: sostituisci res.proxy-cyber.com con mob.proxy-cyber.com. Porte, credenziali e parametri sono identici.

Il tuo conto

Gestisci i tuoi proxy in un unico account

Confronta reti, effettua ordini e segui il tuo saldo e le richieste di supporto da un'unica dashboard. Il nostro team esamina i pagamenti e fornisce i dettagli di connessione dopo la consegna.

Crea un account