Reutiliza un proxy entre peticiones

Aprende a mantener la misma salida de proxy en requests posteriores, para que los renders de JavaScript, las llamadas a API y las extracciones paginadas salgan desde la misma IP.

Por qué reutilizar un proxy

La primera vez que consultas un objetivo, FourA elige un proxy funcional para ti. Cada response incluye el ID del proxy utilizado. Envía ese ID en requests posteriores y:

  • Las páginas de seguimiento se conectan a través de la misma salida, por lo que las session cookies y los rate limits se mantienen coherentes para el objetivo.
  • Una extracción delimitada por país permanece dentro de tu allowlist sin necesidad de una nueva selección.
  • El endpoint económico POST /api/single/ repite la solicitud a través de un proxy que ya pagaste para descubrir, al costo de Single en lugar del de Proxy.

El ID de proxy es un string base36 opaco (algo como A1B2C3). Nunca una IP sin procesar.

Dónde se encuentra el ID en una response

Endpoint Campo Cuándo está presente
POST /api/auto/ session.proxy Cuando returnSession es true (el valor predeterminado)
POST /api/single/ proxy (nivel superior) Solo cuando el request incluye un campo proxy
POST /api/proxy/ proxy (nivel superior) Siempre, en caso de éxito
POST /api/browser/ proxy (nivel superior) Solo cuando el request incluye un campo proxy

Para obtener una salida nueva sin fijar ninguna, comienza con Auto o Proxy. Ambos descubren una salida funcional y devuelven su ID para que lo uses.

Patrón 1: Auto descubre, Single repite

Ideal cuando tienes un objetivo que aún no conoces. Auto recorre la escala una vez, y luego Single reutiliza la sesión ganadora para cada página de seguimiento.

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# Step 1: discover a working exit with Auto.
r = requests.post(f"{API}/api/auto/", headers=H, json={
    "url": "https://example.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}}
}).json()

session = r["session"]
proxy = session["proxy"]
user_agent = session["userAgent"]

# Step 2: paginate with Single, reusing the same exit and User-Agent.
for sku in ("43", "44", "45"):
    p = requests.post(f"{API}/api/single/", headers=H, json={
        "method": "GET",
        "url": f"https://example.com/product/{sku}",
        "proxy": proxy,
        "headers": [["User-Agent", user_agent]],
    }).json()
    print(sku, p["status"])

La llamada Auto cuesta lo que gaste su ladder. Cada llamada Single de seguimiento cuesta 2 créditos (Single con unblocker, el valor predeterminado).

Patrón 2: Proxy descubre, Browser renderiza a través de la misma salida

Usa esto cuando el destino deba ver un país de salida específico y el contenido final requiera JavaScript.

# Step 1: pick a country-scoped exit with Proxy.
curl -X POST https://eu.api.foura.ai/api/proxy/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "maxTries": 5,
    "exitCountries": ["FR", "GB"],
    "request": {"method": "GET", "url": "https://example.com/pricing"}
  }'
# Response includes: "proxy": "A1B2C3", "exitCountry": "FR"

# Step 2: render the JS-heavy page through THAT exit.
curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/pricing",
    "proxy": "A1B2C3",
    "timeout_ms": 20000
  }'

No vuelvas a llamar a /api/proxy/ para refrescar la selección. Una nueva llamada puede elegir un exit distinto y anular el propósito de la fijación. Si el exit fijado deja de funcionar, ejecuta una nueva llamada /api/proxy/ para elegir uno nuevo y luego continúa con ese.

Patrón 3: Omitir un exit quemado

Si un exit que solía funcionar comienza a devolver rechazos o páginas de verificación, indícale a FourA que lo evite en la próxima selección.

{
  "maxTries": 5,
  "ignoreProxies": ["A1B2C3"],
  "request": { "method": "GET", "url": "https://example.com/data" }
}

ignoreProxies acepta una lista de IDs de proxy de respuestas anteriores. Funciona en /api/proxy/ y /api/auto/. La lista se respeta en cada reintento interno, por lo que una sola llamada con ignoreProxies nunca elige las salidas quemadas.

Cuánto tiempo permanece activa una sesión fijada

La salida en sí vive mientras el proxy subyacente esté en buen estado, normalmente de minutos a horas. Si una repetición empieza a devolver desafíos, bloqueos o redirecciones inesperadas, es probable que la salida se haya rotado o que el objetivo haya actualizado su autorización.

Dos opciones cuando eso sucede:

  1. Una llamada /api/auto/ nueva para la misma URL. Auto descubrirá una nueva sesión funcional; descarta los IDs anteriores.
  2. Una llamada /api/proxy/ nueva con ignoreProxies: ["<burned-id>"] si quieres seguir fijando manualmente.

Las cookies de sesión de una respuesta de Auto también caducan según la propia programación del objetivo. Algunos sitios vinculan la autorización durante horas; otros durante minutos. Trata la sesión como una caché, no como un token duradero.

Cuándo un ID no se puede fijar

Pueden devolverse tres errores 400 a partir de un valor proxy, y significan cosas distintas:

Error Qué ocurrió Qué hacer
Invalid proxy format El valor no es un ID emitido por FourA. Una dirección de proxy sin procesar termina aquí. Envía la cadena opaca de una respuesta, textualmente.
Proxy not found El ID se decodificó, pero ya no resuelve a una salida activa. Obtén una nueva salida a partir de una nueva llamada a Auto o Proxy.
Managed exit: this proxy id cannot be pinned to a request El ID es una salida premium y el tráfico premium de tu plan para este período se ha agotado, o tu plan no incluye salidas premium. Ejecuta la llamada a través de POST /api/proxy/ y toma la salida que elija, o añade tráfico premium y vuelve a fijarla.

El tercero se devuelve a partir de un ID que te entregó una llamada exitosa, por lo que puedes recibirlo sin haber hecho nada mal. Trátalo como tratarías una sesión expirada: recurre a una nueva llamada de descubrimiento en lugar de reintentar el mismo ID.

Errores comunes

  • Reutilizar un proxy ID entre cuentas. No compartas IDs entre cuentas: un ID que una cuenta puede fijar puede ser rechazado en otra, por ejemplo, una salida premium en un plan sin tráfico premium.
  • Intentar decodificar el ID. La cadena base36 es opaca. No la analices, no elimines caracteres ni la conviertas a minúsculas. Envíala de vuelta tal cual.
  • Fijar a través de una salida con rate limit. Si el destino aplica un rate limit por IP, canalizar muchas solicitudes a través de una sola salida provocará bloqueos más rápido. Para cargas de trabajo de alto volumen, permite que Auto o Proxy roten a través de muchas salidas y fija solo cuando el destino realmente lo requiera.
  • Fijar una salida premium sin querer. Un ID proveniente de una llamada atendida por una salida premium (exitClass: "premium" en Proxy) fija esa salida premium. Cada repetición a través de ella cuenta contra tu tráfico premium y la respuesta incluye X-FourA-Exit-Class: premium.
  • Enviar exitCountries en un plan sin segmentación geográfica. El alcance por país está incluido a partir del plan Startup. En un plan sin esta función, una llamada que envíe exitCountries se rechaza con un 403 y X-FourA-Limit: plan_limit_feature.
  • Ignorar exitCountries en el seguimiento. Si fijas una salida con alcance y luego llamas a Proxy de nuevo sin exitCountries, la llamada de seguimiento puede salir a través de un país diferente. Mantén el alcance en cada llamada que lo necesite.

Relacionado

Actualizado: 27 de septiembre de 2026