Problemas Comuns
Soluções para os problemas mais comuns ao usar a API FourA.
Conteúdo Vazio ou Incompleto
Sintoma: A API retorna um status 200, mas o campo data está vazio ou sem o conteúdo esperado.
Causa: A página de destino usa JavaScript para renderizar o conteúdo após o carregamento inicial da página.
Solução: Alterne do endpoint single para o endpoint browser. Use checkText para verificar se o conteúdo foi carregado:
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/products",
"timeout_ms": 15000,
"checkText": "product-list"
}'
Nota: o endpoint browser retorna o conteúdo no campo body (não em data).
Páginas 403 Forbidden ou Captcha
Sintoma: A API retorna HTML contendo um desafio de CAPTCHA ou uma página de acesso negado.
Causa: O site de destino detectou a request como automatizada e a bloqueou.
Solução: Use o endpoint proxy para rotação automática de IP:
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,
"request": {
"method": "GET",
"url": "https://example.com/prices",
"unblocker": true
}
}'
Se o problema persistir, aumente maxTries para dar mais tentativas à rotação de proxy.
Erros de Timeout
Sintoma: As requests falham com um erro de timeout.
Causa: A página de destino demora mais para carregar do que o timeout configurado.
Solução: Aumente timeout_ms (o padrão é 15s para single, 30s para browser, 45s para proxy):
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://slow-site.com",
"timeout_ms": 60000
}'
Para requests de browser, verifique também se o valor de checkText realmente aparece na página. Um erro de digitação sempre causará um timeout.
429 Too Many Requests (Limite de RPM)
Sintoma: A API retorna o status 429 com uma mensagem de "rate limit exceeded".
Causa: Você excedeu seu limite de requests por minuto (RPM). Isso é diferente dos limites de concorrência (veja 503 abaixo).
Solução: Use o campo retryAfter da response para aguardar o tempo correto antes de tentar novamente:
import time
import requests
def make_request(endpoint_url, payload, retries=3):
for i in range(retries):
resp = requests.post(
endpoint_url,
headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json=payload
)
if resp.status_code == 429:
body = resp.json()
wait = body.get("retryAfter", 2 ** i)
time.sleep(wait)
continue
return resp
raise Exception("Rate limit not resolved after retries")
# Example: single request
make_request(
"https://eu.api.foura.ai/api/single/",
{"method": "GET", "url": "https://example.com"}
)
Verifique seu uso atual no Dashboard para ver seus rate limits.
503 Service Unavailable
Sintoma: A API retorna o status 503.
Causa: Isso acontece em dois casos:
- Limite de concorrência atingido. Você tem muitas requests simultâneas em execução. Isso é diferente do 429, que limita as requests por minuto. Com o 503, você não excedeu seu RPM, mas atingiu o limite máximo de requests que podem ser executadas ao mesmo tempo.
- Serviço temporariamente desativado. Uma janela de manutenção está em andamento.
Ambos os casos incluem um campo retryAfter na response.
Solução: Aguarde os segundos indicados em retryAfter e tente novamente:
import time
import requests
def make_request_with_retry(endpoint_url, payload, retries=3):
for i in range(retries):
resp = requests.post(
endpoint_url,
headers={"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json=payload
)
if resp.status_code in (429, 503):
body = resp.json()
wait = body.get("retryAfter", 2 ** i)
time.sleep(wait)
continue
return resp
raise Exception("Request not resolved after retries")
Se você estiver atingindo os limites de concorrência 503 regularmente, reduza o número de requests paralelas no seu pipeline de scraping ou verifique o limite de concorrência do seu plano no Dashboard.
Erros de Autenticação 401
Sintoma: Todas as requests retornam 401 Unauthorized.
Checklist:
- Verifique se o header é
X-API-Key: YOUR_API_KEY(nãoAuthorization: BearerouApi-Key) - Verifique se há espaços em branco ou quebras de linha extras na sua chave de API
- Crie uma nova chave no Dashboard se a atual puder estar comprometida
HTML Inesperado em Vez de JSON
Sintoma: Você esperava JSON do site de destino, mas recebeu HTML.
Causa: A página de destino pode servir conteúdos diferentes com base nos headers.
Solução: Adicione um header Accept e ative o unblocker para obter headers de browser realistas:
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://api.example.com/data",
"headers": [["Accept", "application/json"]],
"unblocker": true
}'
Você também pode definir tryJsonData como true para que o FourA analise automaticamente as responses em JSON.
Ainda com Problemas?
Se nenhuma das soluções acima funcionar:
- Verifique a status page para ver se há incidentes em andamento
- Revise as métricas das suas requests no Dashboard
- Entre em contato com o suporte em support@foura.ai enviando os detalhes da sua request
Próximos Passos
- Error Handling: Referência de códigos de erro da API
- Choosing the Right Endpoint: Escolha a melhor abordagem para o seu alvo
- Dashboard Overview: Monitore suas requests