Senza KYC — niente documento, selfie o altri documenti. Paga in crypto: BTC, USDT, USDC, ETH, SOL, LTC
Lingua: Italiano
Inizia ora

Doc · sessioni · rotazione · keep-alive

Sessioni sticky e rotazione IP: ID sessione, TTL e riuso connessioni

La rotazione avviene per connessione, la persistenza per ID sessione. Dopo aver capito come la tua libreria riusa le connessioni, puoi scegliere esattamente quando cambiare IP.

Ultimo aggiornamento: · 6 minuti di lettura

Risposta rapida

Come funzionano sessioni sticky e rotazione IP su un proxy residenziale?

Su CrawlRelay, un nome utente senza ID sessione riceve un IP dal pool ad ogni nuova connessione TCP, di solito diverso, e -session-<id>-ttl-<minutes> mantiene lo stesso IP per quell’ID per fino a 30 minuti, anche se l’IP può cambiare prima. La rotazione segue le connessioni, non le richieste HTTP, quindi il keep-alive decide quando cambi realmente IP. Il traffico residenziale costa 0,50 USD/GB da 50 GB. Pagamento in criptovalute, senza KYC.

Regole di sessione in sintesi

Unità di rotazioneUn IP dal pool per ogni nuova connessione TCP, di solito diverso
Sessione sticky-session-<id>-ttl-<minutes> aggiunto al nome utente
Durata sessionefino a 30 minuti
ID sessione1–32 lettere o cifre; un ID per flusso
Cosa termina una sessione anticipatamenteIl dispositivo residenziale dietro che va offline
ID condivisiI clienti che inviano lo stesso ID condividono la stessa uscita
CostoNessuno: sessioni e rotazione sono incluse nel prezzo per GB

Cosa succede al gateway quando invio un ID di sessione?

Il gateway legge il nome utente ad ogni nuova connessione. Senza una parte di sessione, seleziona un'uscita proxy residenziale che corrisponde al tuo targeting solo per quella connessione. Con una parte di sessione, mantiene la stessa uscita per quell'ID fino al TTL che imposti.

Un IP persistente è una vera connessione domestica, quindi può scomparire prima che il TTL termini: il dispositivo può essere spento, perdere il Wi-Fi o cambiare rete. Flussi lunghi devono sopravvivere a ciò, verificando l'IP di uscita a checkpoint e ripartendo da un checkpoint invece di fallire l’intero lavoro.

Come riutilizza le connessioni ogni libreria?

Se una libreria mantiene una connessione attiva, ogni richiesta su di essa condivide un'uscita. Ecco come ottenere ogni comportamento in modo intenzionale.

LibreriaPredefinitoNuovo IP per richiestaUn indirizzo IP per un flusso
Python requestsSession mantiene le connessioni attiveHeader Connection: close, o un nuovo Session per richiestaUn Session con un ID sessione nel nome utente
httpxIl client gestisce pool di connessionihttpx.Limits(max_keepalive_connections=0)Un client per ogni ID sessione
aiohttpTCPConnector gestisce pool di connessioniTCPConnector(force_close=True)ID sessione nell’username dell’URL del proxy
ScrapyPool per credenziali proxy e hostmeta={"proxy_session": "new"} con il nostro middlewareUn proxy_session fisso per il flusso
Playwright / PuppeteerChrome gestisce pool per contestoNuovo contesto per paginaUn contesto per ogni ID sessione
Node.js undici, axios, gotGli agenti mantengono socket attiviNuovo agente per richiesta, o keep-alive disattivatoUn agente per ogni ID sessione
curlUna connessione per comandoGià cosìStesso ID sessione in ogni comando

Quale strategia di sessione si adatta a quale lavoro di scraping?

LavoroStrategiaTTL suggerito
Pagine prodotto indipendenti, articoli o listeRuota: nessun ID sessione—
Paginazione la cui pagina successiva dipende da un cookie o cursoreUna sessione sticky per ogni annuncio10–30 min
Cerca, poi risultati, poi pagine di dettaglioUna sessione sticky per ogni ricerca10–20 min
Rendering con browser headless di diverse pagine di un sitoUna sessione sticky per ogni contesto browserDurata del contesto, fino a 30 min
Verifica di cosa mostra una pagina in diverse cittàUna sessione breve per ogni controllo città5 min
Ricontrollare la stessa pagina ogni oraRuota—

Come gestisco un pool di sessioni sticky in Python?

Un piccolo pool distribuisce il carico su alcune uscite stabili e ritira ciascuna dopo un numero prefissato di richieste o dopo un segnale che la sua uscita sta fallendo, come 502 o 503. Nota cosa non fa: non cambia IP per superare un 403 o un 429. Significano che il sito vuole che rallenti, quindi il pool li passa al tuo codice.

Python: un pool di sessioni sticky
import random
import uuid

import requests

GATEWAY = "gw.crawlrelay.com:7777"
BASE_USER, PASSWORD = "USERNAME-country-us", "PASSWORD"


class SlowDown(Exception):
    """The target asked us to slow down (403 or 429): back off, do not rotate."""


class StickySession:
    def __init__(self, ttl=15, max_requests=50):
        self.id = uuid.uuid4().hex[:10]
        self.max_requests, self.used = max_requests, 0
        user = "%s-session-%s-ttl-%d" % (BASE_USER, self.id, ttl)
        proxy = "http://%s:%s@%s" % (user, PASSWORD, GATEWAY)
        self.http = requests.Session()
        self.http.proxies = {"http": proxy, "https": proxy}


class SessionPool:
    EXIT_PROBLEMS = {502, 503, 504}

    def __init__(self, size=5, **options):
        self.options = options
        self.sessions = [StickySession(**options) for _ in range(size)]

    def _replace(self, i):
        self.sessions[i].http.close()
        self.sessions[i] = StickySession(**self.options)

    def get(self, url, **kwargs):
        i = random.randrange(len(self.sessions))
        s = self.sessions[i]
        s.used += 1
        try:
            r = s.http.get(url, timeout=(10, 30), **kwargs)
        except requests.exceptions.RequestException:
            self._replace(i)  # dropped exit or timeout: start a fresh session
            raise
        if r.status_code in (403, 429):
            raise SlowDown("%s returned %d" % (url, r.status_code))
        if r.status_code in self.EXIT_PROBLEMS or s.used >= s.max_requests:
            self._replace(i)
        return r


pool = SessionPool(size=5, ttl=15, max_requests=50)
print(pool.get("https://api.ipify.org").text)

Come faccio a sapere se un IP sticky è cambiato?

Chiedilo. Richiedi un servizio di eco IP come https://api.ipify.org usando la stessa sessione all'inizio di un flusso e a ogni checkpoint, quindi confronta le risposte. Un cambiamento significa che l'uscita dietro la sessione è cambiata: riavvia il flusso dal suo ultimo checkpoint oppure apri una nuova sessione. Registralo con l'ID sessione così puoi distinguere i cambi IP dal comportamento del sito durante il debug.

Quali errori nelle sessioni costano di più?

  • Ruotare ad ogni richiesta di un flusso a più step. Il sito vede un carrello, un cursore o un token di ricerca saltare tra paesi e lo resetta.
  • Un ID sessione per ogni worker. Una sessione serve per un solo flusso; assegna a ogni worker e flusso un proprio ID.
  • Sessioni troppo lunghe rispetto al lavoro. Un TTL di 30 minuti per un flusso di 2 minuti occupa inutilmente un IP e rende i log più difficili da leggere.
  • Trattare un 429 come un problema IP. Un nuovo IP non cambia la regola del sito; rallentare sì. Vedi 429 Too Many Requests.
  • Assumere rotazione a ogni richiesta. Keep-alive mantiene l'uscita; consulta la tabella sopra per la tua libreria.

Sessioni e rotazione: domande

Quanto dura una sessione sticky?

Le sessioni sticky mantengono lo stesso IP per il tempo impostato (ttl, in minuti), fino a 30 minuti. L’IP può cambiare prima, per esempio se il dispositivo residenziale va offline. Scegli un TTL leggermente più lungo del flusso che serve e verifica l'uscita ai checkpoint.

Una sessione sticky costa di più della rotazione?

No. CrawlRelay fattura il traffico per GB, e sessioni, rotazioni e targeting sono inclusi nel prezzo. Una sessione sticky può anche risparmiare traffico, perché una connessione mantenuta evita un nuovo handshake TLS a ogni richiesta.

Ruotare ad ogni richiesta è meglio per lo scraping?

Per pagine indipendenti, ruotare distribuisce il carico ed evita di colpire un sito da un unico IP per ore. Per qualsiasi cosa con stato, come la paginazione legata a un cookie, rompe il flusso. La maggior parte dei crawling mescola entrambi: ruota tra gli elementi, resta sticky all'interno di un flusso.

Posso scegliere esattamente l'IP che ottengo?

No. Un gateway residenziale assegna uscite da un pool che cambia continuamente, seguendo il targeting del tuo username. Scegli paese, città, stato USA, CAP o ASN e puoi mantenere un IP con una sessione; non puoi riservare un indirizzo specifico.

Rotazione e sessioni sono in ogni piano

1,50 USD per 1 GB, 0,50 USD/GB da 50 GB.

Da 0,50 USD/GB · senza KYC

Inizia ora