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:
- Nova chamada
/api/auto/para a mesma URL. O Auto descobrirá uma nova sessão funcional; descarte os IDs anteriores. - Nova chamada
/api/proxy/comignoreProxies: ["<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
exitCountriesna continuação. Se você fixar um exit com escopo e depois chamar Proxy novamente semexitCountries, a continuação pode cair em um país diferente. Mantenha o escopo em toda chamada que precisar.
Relacionados
- Endpoints da API: Referência completa de parâmetros e response
- Smart Fetch (Auto): Como o Auto constrói a sessão que você faz replay
- Lidando com Proteção Anti-Bot: Quando fixar ajuda e quando a rotação é melhor
- Problemas comuns:
no_eligible_proxye outros erros de proxy