A resposta 000 indica que a cURL falhou na execução por algum motivo. Nesse caso, você deve testar o código de saída cURL em vez de fazer suposições. Consulte a seção "Exit Codes" da curl manpage para obter uma lista completa dos códigos de saída e seus significados.
Resolução de DNS falhada (6)
$ curl -w "%{http_code}\n" http://example.invalid/ ; echo "Exit code: $?"
000
curl: (6) Could not resolve host: example.invalid
Exit code: 6
(como respondido por ILIV)
Conexão recusada (7)
$ curl -w "%{http_code}\n" http://localhost:81/ ; echo "Exit code: $?"
000
curl: (7) Failed to connect to localhost port 81: Connection refused
Exit code: 7
Tempo limite da conexão esgotado (28)
$ curl -w "%{http_code}\n" -m 5 http://10.255.255.1/ ; echo "Exit code: $?"
000
curl: (28) Connection timed out after 5001 milliseconds
Exit code: 28
(como respondido por Arun)
O servidor realmente retorna 000 por algum motivo (0)
Inicie um servidor falso:
$ nc -l -p 65535 & <<EOF
> HTTP/1.1 000 Fake Status Code
> Content-Length: 0
> Connection: close
>
> EOF
Solicitação do cliente:
$ curl -w "%{http_code}\n" http://localhost:65535/ ; echo "Exit code: $?"
000
Exit code: 0
Nenhuma ideia de por que isso aconteceria no mundo real, mas ei. Se cURL não obtiver um código de status válido, ele assumirá 200.