Quando um teste com curl mostra 000 como status HTTP, ele não obteve um código de resposta HTTP final para informar. O site não enviou um status HTTP real chamado 000.

Registre o erro também

Este exemplo para um shell POSIX imprime o campo HTTP final, o campo CONNECT e o código de saída do processo curl:

curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect}\n' https://example.com/
result=$?
printf 'curl_exit=%s\n' "$result"

Substitua o endpoint do exemplo pelo seu proxy HTTP ou por um candidato da lista de proxies HTTP. Mantenha show-error ativado: a mensagem de erro costuma ser a parte mais útil. O campo CONNECT é relevante quando há um túnel; ele não é um segundo status final do site.

Leia os valores em conjunto

  • Uma falha de conexão com o proxy pode deixar o campo HTTP em 000.
  • Um tempo limite atingido antes de receber uma resposta pode causar o mesmo resultado.
  • Uma resposta CONNECT bem-sucedida seguida de uma falha de TLS pode mostrar connect=200 e http=000.
  • Uma resposta completa do site, como 403, é diferente: existe uma resposta HTTP real para examinar.

O código de saída exato e a mensagem ajudam a delimitar a causa. Veja se a falha ocorreu ao localizar o proxy, conectar à porta dele, negociar o túnel ou verificar o destino.

Não reduza todos os resultados a uma verificação de status

Um script que salva apenas http_code descarta o erro de transporte. Salve também o resultado do processo e uma mensagem de erro sem dados sensíveis. No sentido inverso, o curl pode concluir uma transferência com sucesso enquanto o site retorna um status de erro, a menos que você use uma opção fail adequada. A resposta HTTP e o resultado da execução do cliente respondem a perguntas diferentes.

Não tente corrigir 000 desativando a verificação TLS ou adicionando um cabeçalho aleatório. Primeiro descubra qual operação não chegou a obter uma resposta final.

Artigos relacionados