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.
# 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:9001richieste#
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.
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.
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.
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.