Reutiliza un proxy entre peticiones

Aprende cómo mantener la misma salida de proxy en requests de seguimiento, de manera que el renderizado de JavaScript, las llamadas a la API y las peticiones paginadas salgan de la misma IP.

Por qué reutilizar un proxy

Cuando visitas un objetivo por primera vez, FourA selecciona un proxy funcional para ti. Cada response incluye el ID del proxy que se utilizó. Pasa ese ID en los requests posteriores y:

  • Las páginas de seguimiento llegan a través de la misma salida, por lo que las cookies de sesión y los rate limits se mantienen coherentes para el objetivo.
  • Una petición limitada por país se mantiene dentro de tu lista de permitidos sin una nueva selección.
  • El endpoint económico POST /api/single/ se repite a través de un proxy que ya pagaste por descubrir, al coste de Single en lugar del coste de Proxy.

El ID del proxy es una cadena opaca en base36 (algo como A1B2C3). Nunca una IP en bruto.

Dónde se encuentra el ID en un response

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

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

Patrón 1: Auto descubre, Single repite

Ideal cuando tienes un objetivo que aún no conoces. Auto recorre la escalera una vez, 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 escalera. Cada llamada Single de seguimiento cuesta 2 créditos (Single con unblocker, por defecto).

Patrón 2: El proxy descubre, el navegador renderiza a través de la misma salida

Usa esto cuando el objetivo deba ver un país de salida específico y el contenido final necesite 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 llames a /api/proxy/ de nuevo para actualizar la selección. Una nueva llamada puede elegir una salida diferente y anular el propósito de la fijación. Si la salida fijada deja de funcionar, ejecuta una nueva llamada a /api/proxy/ para elegir una nueva, y luego continúa con esa.

Patrón 3: Omitir una salida quemada

Si una salida que solía funcionar comienza a devolver bloqueos o CAPTCHAs, dile a FourA que la evite en la siguiente 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 se mantiene activa una sesión anclada

La salida en sí vive mientras el proxy subyacente esté en buen estado, normalmente de minutos a horas. Si un replay comienza a devolver desafíos, bloqueos o redireccionamientos inesperados, probablemente la salida fue rotada o el objetivo actualizó su autorización.

Dos opciones cuando eso sucede:

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

Las cookies de sesión de una respuesta de Auto también expiran en el propio horario del objetivo. Algunos sitios mantienen la autorización durante horas; otros durante minutos. Trata la sesión como una caché, no como un token duradero.

Errores comunes

  • Reutilizar un ID de proxy entre cuentas. Los IDs de proxy son identificadores por respuesta. Pasar un ID de una clave API a otra no garantiza que se resuelva a la misma salida.
  • Intentar decodificar el ID. La cadena base36 es opaca. No la analices, no le quites caracteres ni la conviertas a minúsculas. Devuélvela tal cual.
  • Anclar a través de una salida con rate limit. Si el objetivo tiene un rate limit por IP, canalizar muchas solicitudes a través de una sola salida desencadenará bloqueos más rápido. Para cargas de trabajo de alto volumen, permite que Auto o Proxy roten a través de múltiples salidas y ancla solo donde el objetivo lo requiera genuinamente.
  • Ignorar exitCountries en el seguimiento. Si anclas una salida con alcance específico y luego llamas a Proxy de nuevo sin exitCountries, el seguimiento podría llegar a través de un país diferente. Mantén el alcance en cada llamada que lo necesite.

Relacionado

Actualizado: 1 de agosto de 2026