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:
- Una llamada
/api/auto/nueva para la misma URL. Auto descubrirá una nueva sesión funcional; descarta los IDs anteriores. - Una llamada
/api/proxy/nueva conignoreProxies: ["<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 incluyeX-FourA-Exit-Class: premium. - Enviar
exitCountriesen 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íeexitCountriesse rechaza con un403yX-FourA-Limit: plan_limit_feature. - Ignorar
exitCountriesen el seguimiento. Si fijas una salida con alcance y luego llamas a Proxy de nuevo sinexitCountries, 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
- API Endpoints: Referencia completa de parámetros y respuestas
- Smart Fetch (Auto): Cómo Auto construye la sesión que reproduces
- Sitios protegidos: Cuándo ayuda fijar y cuándo es mejor rotar
- Problemas comunes:
no_eligible_proxyy otros errores de proxy - Por qué una solicitud de Proxy agotó los intentos: Lectura de
attemptReportcuando una llamada de Proxy se da por vencida