Reutilizar um proxy entre requisições

Aprenda como manter a mesma saída de proxy em requests subsequentes, para que a renderização de JavaScript, chamadas de API e buscas paginadas saiam do mesmo IP.

Por que reutilizar um proxy

Quando você acessa um alvo pela primeira vez, a FourA escolhe um proxy funcional para você. Cada response inclui o ID do proxy utilizado. Passe esse ID nos próximos requests e:

  • Páginas subsequentes chegam pela mesma saída, para que os cookies de sessão e os rate limits permaneçam coerentes para o alvo.
  • Um fetch com escopo de país permanece dentro da sua allowlist sem uma nova seleção.
  • O endpoint barato POST /api/single/ é repetido através de um proxy que você já pagou para descobrir, pelo custo do Single em vez do Proxy.

O ID do proxy é uma string base36 opaca (algo como A1B2C3). Nunca um IP bruto.

Onde o ID fica em uma response

Endpoint Campo Quando está presente
POST /api/auto/ session.proxy Quando returnSession é true (o padrão)
POST /api/single/ proxy (nível superior) Apenas quando o request forneceu um campo proxy
POST /api/proxy/ proxy (nível superior) Sempre, em caso de sucesso
POST /api/browser/ proxy (nível superior) Apenas quando o request forneceu um campo proxy

Para obter uma nova saída sem fixar uma, comece com Auto ou Proxy. Ambos descobrem uma saída funcional e retornam seu ID para você.

Padrão 1: Auto descobre, Single repete

Ideal quando você tem um alvo que ainda não conhece. O Auto percorre a cadeia uma vez, então o Single reutiliza a sessão vencedora para cada página subsequente.

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"])

A chamada Auto custa o que seu ladder gastar. Cada chamada Single subsequente custa 2 créditos (Single com unblocker, o padrão).

Padrão 2: O proxy descobre, o navegador renderiza pela mesma saída

Use isso quando o alvo deve ver um país de saída específico e o conteúdo final precisa de 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
  }'

Não chame /api/proxy/ novamente para atualizar a seleção. Uma nova chamada pode escolher uma saída diferente e anular o objetivo da fixação. Se a saída fixada parar de funcionar, execute uma nova chamada /api/proxy/ para escolher uma nova e continue com ela.

Padrão 3: Ignorar uma saída queimada

Se uma saída que costumava funcionar começar a retornar bloqueios ou CAPTCHAs, diga à FourA para evitá-la na próxima seleção.

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

ignoreProxies aceita uma lista de IDs de proxy de responses anteriores. Funciona no /api/proxy/ e no /api/auto/. A lista é respeitada em cada retry interno, então uma única chamada com ignoreProxies nunca escolhe os exits queimados.

Quanto tempo uma sessão fixada permanece ativa

O exit em si dura enquanto o proxy subjacente estiver saudável, tipicamente minutos a horas. Se um replay começar a retornar desafios, bloqueios ou redirecionamentos inesperados, o exit provavelmente foi rotacionado ou o alvo atualizou sua liberação.

Duas opções quando isso acontece:

  1. Nova chamada /api/auto/ para a mesma URL. O Auto descobrirá uma nova sessão funcional; descarte os IDs anteriores.
  2. Nova chamada /api/proxy/ com ignoreProxies: ["<burned-id>"] se você quiser continuar fixando manualmente.

Cookies de sessão de um response Auto também expiram no próprio cronograma do alvo. Alguns sites mantêm a liberação por horas; outros por minutos. Trate a sessão como um cache, não como um token durável.

Erros comuns

  • Reutilizar um ID de proxy em contas diferentes. IDs de proxy são identificadores por response. Passar um ID de uma chave de API para outra não garante que resolva para o mesmo exit.
  • Tentar decodificar o ID. A string base36 é opaca. Não faça parse, não remova caracteres, não converta para minúsculas. Passe de volta exatamente como está.
  • Fixar através de um exit com rate limit. Se o alvo aplica rate limit por IP, canalizar muitos requests através de um único exit acionará bloqueios mais rápido. Para cargas de trabalho de alto volume, deixe o Auto ou Proxy rotacionar por muitos exits e fixe apenas onde o alvo genuinamente exigir.
  • Ignorar exitCountries na continuação. Se você fixar um exit com escopo e depois chamar Proxy novamente sem exitCountries, a continuação pode cair em um país diferente. Mantenha o escopo em toda chamada que precisar.

Relacionados

Atualizado em: 1 de agosto de 2026