Sin KYC — sin ID, sin selfie, sin documentos. Paga con criptomonedas: BTC, USDT, USDC, ETH, SOL, LTC
Idioma: Español
Comienza ahora

Docs · sesiones · rotación · keep-alive

Sesiones persistentes y rotación de IP: IDs de sesión, TTL y reutilización de conexión

La rotación ocurre por conexión, la persistencia por ID de sesión. Una vez que sabes cómo tu biblioteca reutiliza conexiones, puedes decidir cuándo cambia exactamente la IP.

Última actualización: · 6 minutos de lectura

Respuesta rápida

¿Cómo funcionan las sesiones persistentes y la rotación de IP en un proxy residencial?

En CrawlRelay, un nombre de usuario sin ID de sesión obtiene una IP del pool en cada nueva conexión TCP, usualmente diferente, y -session-<id>-ttl-<minutes> mantiene una IP para ese ID durante hasta 30 minutos, aunque la IP puede cambiar antes. La rotación sigue las conexiones, no las solicitudes HTTP, así que el keep-alive decide cuándo cambia realmente tu IP. El tráfico residencial cuesta 0,50 US$/GB desde 50 GB. Se paga en criptomonedas, sin KYC.

Reglas de sesión de un vistazo

Unidad de rotaciónUna IP del pool por cada nueva conexión TCP, usualmente diferente
Sesión persistente-session-<id>-ttl-<minutes> anexado al nombre de usuario
Duración de la sesiónhasta 30 minutos
ID de sesión1–32 letras o dígitos; un ID por flujo
Qué termina una sesión antes de tiempoEl dispositivo residencial que hay detrás queda offline
IDs compartidosLos clientes que envían el mismo ID comparten la misma salida
CostoNinguno: las sesiones y la rotación están incluidas en el precio por GB

¿Qué sucede en la puerta de enlace cuando envío un ID de sesión?

La puerta de enlace lee el nombre de usuario en cada nueva conexión. Sin una parte de sesión, selecciona una salida residencial que coincida con tu segmentación solo para esa conexión. Con una parte de sesión, mantiene la misma salida para ese ID hasta el TTL que configures.

Una IP fija es una conexión real de un hogar, por lo que puede desaparecer antes de que termine el TTL: el dispositivo se apaga, pierde Wi-Fi o cambia de red. Los flujos largos deben sobrevivir a eso, verificando la IP de salida en puntos de control y reiniciando desde un punto de control en lugar de fallar toda la tarea.

¿Cómo reutiliza conexiones cada biblioteca?

Si una biblioteca mantiene viva una conexión, cada solicitud en ella comparte una sola salida. Así es como se obtiene cada comportamiento a propósito.

BibliotecaPor defectoNueva IP por solicitudUna IP para un flujo
Python requestsSession mantiene las conexiones activasEncabezado Connection: close, o un nuevo Session por solicitudUn Session con un ID de sesión en el nombre de usuario
httpxEl cliente agrupa conexioneshttpx.Limits(max_keepalive_connections=0)Un cliente por ID de sesión
aiohttpTCPConnector agrupa conexionesTCPConnector(force_close=True)ID de sesión en el nombre de usuario de la URL del proxy
ScrapyAgrupaciones por credenciales y host del proxymeta={"proxy_session": "new"} con nuestro middlewareUn proxy_session fijo para el flujo
Playwright / PuppeteerChrome agrupa por contextoNuevo contexto por páginaUn contexto por ID de sesión
Node.js undici, axios, gotLos agentes mantienen los sockets activosNuevo agente por solicitud, o keep-alive desactivadoUn agente por ID de sesión
curlUna conexión por comandoYa es asíMismo ID de sesión en cada comando

¿Qué estrategia de sesión se ajusta a qué tipo de trabajo de scraping?

TrabajoEstrategiaTTL sugerido
Páginas independientes de producto, artículo o listadoRotar: sin ID de sesión—
Paginación cuya página siguiente depende de una cookie o cursorUna sesión sticky por listado10–30 min
Buscar, luego resultados, luego páginas de detalleUna sesión sticky por búsqueda10–20 min
Navegador sin interfaz que renderiza varias páginas de un sitioUna sesión sticky por contexto de navegadorLa duración del contexto, hasta 30 min
Comprobar qué muestra una página en varias ciudadesUna sesión corta por comprobación de ciudad5 min
Volver a comprobar la misma página cada horaRotar—

¿Cómo gestiono un grupo de sesiones sticky en Python?

Un grupo pequeño distribuye la carga entre varios proxies móviles 4G estables y retira cada uno tras un número establecido de solicitudes o tras una señal de que su proxy está fallando, como un 502 o 503. Nota lo que no hace: no cambia IPs para pasar un 403 o un 429. Eso significa que el sitio quiere que reduzcas la velocidad, así que el grupo los eleva a tu código.

Python: un grupo de sesiones 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)

¿Cómo sé si una IP sticky ha cambiado?

Pregunta. Solicita un servicio de eco de IP como https://api.ipify.org usando la misma sesión al inicio del proceso y en cada punto de control, y compara las respuestas. Un cambio significa que el proxy residencial detrás de la sesión cambió: reinicia el flujo desde su último punto de control o abre una nueva sesión. Regístralo con el ID de sesión para distinguir cambios de IP del comportamiento del sitio al hacer debug.

¿Cuáles errores en las sesiones cuestan más?

  • Rotar en cada solicitud de un flujo con varios pasos. El sitio ve un carrito, cursor o token de búsqueda saltar entre países y lo reinicia.
  • Un ID de sesión para cada trabajador. Una sesión es para un solo flujo; da a cada trabajador y flujo su propio ID.
  • Sesiones mucho más largas que el trabajo. Un TTL de 30 minutos para un flujo de 2 minutos mantiene una IP ocupada inútilmente y complica los registros.
  • Tratar un 429 como problema de IP. Una IP nueva no cambia la regla del sitio; reducir la velocidad sí. Consulta 429 Too Many Requests.
  • Asumir rotación en cada solicitud. Keep-alive mantiene el proxy; verifica la tabla arriba según tu biblioteca.

Sesiones y rotación: preguntas

¿Cuánto dura una sesión sticky?

Las sesiones sticky mantienen la misma IP el tiempo que configures (ttl, en minutos), hasta 30 minutos. La IP puede cambiar antes, por ejemplo si el dispositivo residencial se desconecta.. Elige un TTL un poco más largo que el flujo que sirve y revisa el proxy en los puntos de control.

¿Cuesta más una sesión sticky que rotar?

No. CrawlRelay cobra el tráfico por GB, e incluye sesiones, rotación y segmentación en ese precio. Una sesión sticky incluso puede ahorrar tráfico, porque una conexión mantenida evita una nueva negociación TLS para cada solicitud.

¿Rotar en cada solicitud es mejor para scraping?

Para páginas independientes, rotar distribuye la carga y evita usar un proxy residencial en un sitio por horas. Para todo con estado, como paginación ligada a cookie, rompe el flujo. La mayoría de rastreos mezclan ambos: rotan entre ítems y permanecen sticky dentro de un flujo.

¿Puedo elegir la IP exacta que obtengo?

No. Un gateway residencial asigna proxies móviles 4G desde un grupo que cambia constantemente, según la segmentación en tu nombre de usuario. Puedes elegir país, ciudad, estado de EE. UU., código postal o ASN, y mantener una IP con una sesión sticky; no puedes reservar una dirección específica.

Rotación y sesiones en todos los planes

1,50 US$ por 1 GB, 0,50 US$/GB desde 50 GB.

Desde 0,50 US$/GB · sin KYC

Comienza ahora