Resultados de Requests
Cada request para a API FourA é classificado em exatamente um outcome, e o mesmo vale para cada túnel pela porta de proxy. O outcome é calculado uma vez, ao final da chamada, e registrado na credencial que o originou. Seu painel, feed de atividades e faturamento leem todos o mesmo campo.
Apenas success consome créditos. O tráfego premium é contabilizado separadamente dos créditos e não segue o outcome: consulte Billing Implications.
The Seven Outcomes
Estes são os sete estados em que um request pode terminar. Um túnel usa cinco deles: consulte Tunnels Use the Same Vocabulary abaixo.
| Outcome | Layer | O que significa |
|---|---|---|
success |
n/a | Uma resposta válida foi entregue. Conta para a sua cota faturável. |
application_error |
target | O destino retornou HTTP 200, mas o corpo continha um campo de erro, ou o corpo é uma página de verificação de bot reconhecida pelo FourA. |
application_fail |
target | O destino retornou um status não-2xx que suas regras de validate não aceitaram, ou nenhuma resposta, incluindo um nome de host de destino que não pode ser resolvido. |
client_error |
caller | Seu request foi rejeitado antes de sair do FourA. Parâmetros inválidos, valor de proxy malformado, URL bloqueada por proteção contra SSRF. |
rate_limit |
FourA | O request foi recusado antes de ser executado: por um dos limites do seu plano (um 403 para um endpoint ou parâmetro não incluído no plano, um 429 por cota esgotada) ou pelo limite compartilhado de RPM ou concorrência da plataforma. |
service_error |
FourA | A engine respondeu com um erro de servidor, ou seu corpo não era um JSON válido. |
service_fail |
FourA | A própria rede do FourA falhou: a engine não respondeu a tempo ou a conexão caiu, ou você desconectou. |
A coluna de layer indica o responsável:
- Outcomes target dizem respeito ao site chamado. Seu request chegou perfeitamente ao FourA, e o FourA alcançou o destino perfeitamente. O próprio destino retornou um erro.
- Outcomes caller significam que seu request não pôde ser processado. Corrija o formato do request.
- Outcomes FourA são de nossa responsabilidade. Tente novamente e verifique a página de status se persistirem.
Um site de destino que retorna 403 é application_fail, não client_error. Sua chamada estava bem formatada. O site apenas recusou.
Success Is validate-Aware
Sem validate, a API marca um request como success apenas quando o destino retorna HTTP 200.
Com validate, o sucesso segue as regras que você declarou. Se você informar à API que 200 e 403 são ambos aceitáveis para um determinado request, um 403 retorna como success. O corpo ainda chega até você inalterado.
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://target.example/feed",
"validate": {
"status": { "accept": [200, 403] }
}
}'
Nesta chamada, uma resposta 403 conta como success e é cobrada como uma request. Uma resposta 500 conta como application_fail e não é cobrada.
A mesma lógica se aplica a validate.headers e validate.data. Qualquer resposta que o motor aceitar segundo as suas regras retorna como success, independentemente do status HTTP.
Uma resposta nunca é success, com ou sem validate: um HTTP 200 cujo corpo seja uma página de verificação de bot reconhecida pelo FourA, como uma tarefa de verificação visual ou uma página que apenas solicita que o navegador execute JavaScript. Essa request é application_error e não é cobrada. O corpo ainda chega até você sem alterações, e o header X-FourA-Check-Page identifica a página de verificação.
Implicações de Faturamento
| Outcome | Faturável | Conta para a quota |
|---|---|---|
success |
Sim | Sim |
application_error |
Não | Não |
application_fail |
Não | Não |
client_error |
Não | Não |
rate_limit |
Não | Não |
service_error |
Não | Não |
service_fail |
Não | Não |
Apenas as requests que entregaram os dados solicitados são cobradas. Falhas no lado do FourA, no lado do destino ou no seu próprio lado são todas gratuitas.
A tabela refere-se a créditos. O tráfego premium é contabilizado separadamente: uma request que tentou uma saída premium contabiliza o tráfego que essa tentativa transportou, independentemente do resultado, pois a saída foi utilizada de qualquer forma. Uma tentativa que ainda estava em execução quando outra saída respondeu é interrompida imediatamente, e o tráfego transportado até então também é contabilizado.
O tráfego padrão também não segue o resultado: em um plano com limite de largura de banda, o tráfego de cada request conta para esse limite. Uma request recusada por um dos limites do seu próprio plano não contabiliza tráfego.
Túneis Usam o Mesmo Vocabulário
Um túnel através da porta de proxy também termina em um desses resultados, de modo que um único conjunto de rótulos abrange ambos os produtos. Apenas cinco dos sete podem ocorrer, pois os dois resultados target exigem que o FourA tenha visto a resposta do destino, e a resposta de um túnel é o seu próprio tráfego criptografado.
| Outcome | Em um túnel, isso significa |
|---|---|
success |
O túnel foi aberto e a sua ferramenta o recebeu. |
client_error |
O FourA não abrirá esse túnel: um endereço privado ou reservado, ou uma porta não atendida. |
rate_limit |
Um dos limites do seu plano foi atingido (túneis abertos simultaneamente, aberturas de túnel por minuto, o tráfego padrão do período, tráfego premium inexistente), ou a própria porta estava no limite de capacidade ou de taxa de abertura. |
service_error |
O FourA não tinha saída para o que você solicitou. Geralmente temporário. |
service_fail |
O destino não pôde ser alcançado por nenhuma saída tentada pelo FourA: DNS, timeout, conexão recusada. |
application_error |
Nunca ocorre em um túnel. |
application_fail |
Nunca ocorre em um túnel. |
Uma recusa também traz um motivo curto, e o dashboard o exibe nos seus próprios termos em vez dos nossos. Uma opção que a FourA não pode atender é respondida com 400 na própria conexão e não grava nenhuma linha, portanto nunca aparece aqui.
| Motivo na tela | O que esgotou |
|---|---|
| port not in plan | Seu plano não inclui a porta de proxy |
| tunnels at once | Todos os túneis simultâneos permitidos pelo seu plano estavam em uso |
| openings per minute | As aberturas de túnel por minuto do seu plano foram esgotadas |
| traffic used up | O tráfego do seu plano para este período foi esgotado |
| premium not available | O tráfego premium não está disponível no seu plano no momento |
| port was full | A própria porta estava no limite de capacidade ou de taxa de abertura. Tente novamente em instantes. |
| port not served | A FourA não abre túneis para essa porta |
| private address | Endereços privados e reservados não podem ser alcançados |
Nada em relação a um túnel é cobrado em créditos, porque um túnel não possui uma request para cobrar. A porta faz a medição por bytes. Consulte Como seu plano é medido.
Como ler os resultados no Dashboard
Cada request que sua chave de API faz aparece no feed Activity com o rótulo do seu resultado. As páginas Metrics e Overview agregam o mesmo campo para gráficos de rosca e cronogramas.
Quando você filtra Activity por resultado, também pode focar em um único endpoint (Auto, Single, Proxy Finder, Browser) para verificar se uma classe de falha é específica de um deles. Altere Product da página para Proxy e as mesmas tags de resultado filtrarão seus túneis.
Heurísticas de repetição
Uma política inicial de retry baseada nos resultados:
| Resultado | Seguro repetir? | Quando |
|---|---|---|
success |
n/a | Você já tem a resposta. |
application_error |
Às vezes | Leia o corpo de erro do destino. Alguns são temporários, a maioria não. Se X-FourA-Check-Page estiver definido, o site exibiu uma página de verificação: envie a URL para o Auto, que trata a página de verificação como uma etapa a ser superada, não como a resposta final. |
application_fail |
Às vezes | Se o destino estiver aplicando rate limit, diminua o ritmo. Se estiver bloqueando você, mude para o endpoint Proxy ou Browser. |
client_error |
Não | A request falhará novamente da mesma maneira. Corrija os parâmetros de entrada. |
rate_limit |
Depende | Respeite o tempo de espera informado na resposta: Retry-After, retry_after_seconds ou retryAfter. Em plan_limit_browser_daily, pare até a meia-noite UTC; em plan_limit_credits ou plan_limit_bandwidth, pare até resets_at; em plan_limit_feature ou plan_limit_premium, altere a request. |
service_error |
Sim | Backoff exponencial curto. |
service_fail |
Sim | O mesmo que service_error. |
Relacionado
- Erros de API: respostas de erro no nível HTTP
- Porta do Proxy: status codes retornados na recusa de um túnel
- Rate Limits: o que dispara
rate_limite os dois formatos de retorno - Métricas: onde você vê o detalhamento dos resultados
- Log de Atividade: histórico de resultados por request