Ir para o conteúdo

Erros

Toda negativa diz quem disse não, porque é isso que define o seu próximo passo. Três delas não custam nada, a não ser que um script seu tenha rodado na página antes: aí só falha nossa continua de graça.

CódigoHTTPQuem disse não
VALIDATION_ERROR400-
INVALID_URL400-
SSRF_DENIED400A nossa política disse não0cr· recusada · não cobrada
UNAUTHORIZED401-
INVALID_TOKEN401-
PLAN_GATE402-
FORBIDDEN403-
AUP_DENIED403A nossa política disse não0cr· recusada · não cobrada
NOT_FOUND404-
SESSION_NOT_FOUND404-
CONFLICT409-
PAYLOAD_TOO_LARGE413-
UPSTREAM_BLOCKED422O site disse não0cr· bloqueada · não cobrada
NAV_TIMEOUT422O tempo acabou0cr· tempo esgotado · não cobrada
PROXY_REFUSED422-
FILE_TOO_LARGE422-
DOCUMENT_TIMEOUT422-
ACTION_FAILED422-
RATE_LIMIT_EXCEEDED429-
QUOTA_EXCEEDED429-
INTERNAL_ERROR500A gente quebrou0cr· estornada
SERVICE_UNAVAILABLE503A gente quebrou0cr· estornada
BILLING_UNAVAILABLE503A gente quebrou0cr· estornada

O site disse não

Um bloqueio anti-bot, um captcha ou uma negativa seca. Nada quebrou, e nada foi cobrado, a não ser que um script seu de browser.actions tenha rodado na página antes. Repetir a chamada idêntica traz a resposta idêntica. Mude alguma coisa: a engine browser, outro país de saída, o seu próprio proxy.

O tempo acabou

A página não ficou pronta antes de o timeoutMs acabar (NAV_TIMEOUT). Ninguém disse não, e nada foi cobrado, a não ser que um script seu de browser.actions tenha rodado na página antes. Dê mais tempo: aumente o timeoutMs ou peça menos formatos.

A nossa política disse não

Um endereço privado, de loopback ou link-local (em qualquer salto de qualquer redirecionamento), ou um host na lista de uso aceitável. Repetir não adianta, e nada foi cobrado, a não ser que um script seu de browser.actions tenha levado a página até lá. Troque a URL.

A gente quebrou

Um 5xx é nosso. Já foi estornado antes de você ler, e é o único erro que vale repetir exatamente igual.

O resto é nosso explicar e seu resolver

Um campo errado, uma chave que falta ou foi revogada, uma cota gasta, um plano que não inclui aquilo. Cada uma diz qual campo ou qual limite, e um limite que passa esperando vem com Retry-After e o momento em que zera. Um passo seu em browser.actions que não funcionou responde ACTION_FAILED, diz qual passo e por quê, e não custa nada. Com script é diferente. Depois que um script seu começa a rodar, a chamada é cobrada mesmo que um passo falhe, o site bloqueie a página, o tempo acabe, a nossa política recuse o endereço para onde o script foi, o seu próprio proxy não abra a conexão ou um seletor seu fique lento demais na página que ele montou, porque o script pode já ter lido a página. Um 5xx continua sendo estornado.

Deixe folga entre o seu timeout e o nosso

Uma negativa que a gente devolve é informação: UPSTREAM_BLOCKED quer dizer que o site disse não. Se o prazo do seu cliente for igual ao timeoutMs que você envia, os dois disputam, e quando o seu ganha, chega um erro de transporte no lugar, que parece falha nossa e joga fora uma resposta verdadeira que já estava na linha. Deixe o seu prazo bem acima do que você manda pra gente; dez segundos bastam. Isso pesa mais se você estorna ou tenta de novo do seu lado, porque a disputa transforma “o site bloqueou” em “a chamada quebrou”, e as duas pedem tratamento oposto.

O formato de uma negativa

422 Unprocessable Content
{
  "error": {
    "code": "UPSTREAM_BLOCKED",
    "message": "example.com refused the request (cloudflare)",
    "details": { "status": 403, "reason": "cloudflare", "finalUrl": "https://example.com/" }
  }
}

x-request-cost: 0
x-credits-remaining: 987

Sempre este envelope. details traz o caminho do campo e a regra que ele quebrou, nunca o valor que você enviou.