curl http_code de 000

3

Eu tenho um script de shell que uso para monitorar os tempos de carregamento e os códigos de resposta no meu cluster de servidores ativos. Ele executa um total de 250 iterações a cada 5 minutos, distribuídas em 10 servidores e 6 sites. Ele usa o curl com o sinalizador -w para retornar informações pertinentes que são então analisadas pelo meu shell script:

curl -svw 'monitor_load_times %{time_total} %{http_code}' -b 'server=$server' -m 15 -o /dev/null $url 2>&1

Essas informações são analisadas por um script gráfico que pode exibir várias respostas diferentes. No entanto, o curl ocasionalmente retornará um código de resposta de "000". Quando isso acontece, parece acontecer várias vezes ao mesmo tempo, apesar de estar distribuído em várias iterações:

O que estou tentando descobrir é se esse é um problema do lado do cliente que está distorcendo meus resultados ou se é realmente indicativo de um problema no servidor que afeta todo o cluster. 000 significa que a conexão foi descartada? As entradas do banco de dados correspondentes às iterações de curl com esse código de resposta retornam "0.000" para o valor time_total. Todos os resultados de pesquisa encontrados para o curl que retorna um código de 000 estão relacionados ao fato de o HTTPS não ser compatível, mas todos os URLs de teste são HTTP.

(O pico de 500 erros é um problema completamente não relacionado que afetou meus servidores na noite passada.)

    
por Mikkel 06.11.2012 / 18:05

3 respostas

9

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.

    
por 24.05.2016 / 20:08
1

Eu acredito que 000 significa que o curl não conseguiu resolver um nome DNS:

$ curl -I -w "%{http_code}" https://zxcvsitename.com curl: (6) Could not resolve host: zxcvsitename.com; Unknown error 000

Note que ele retorna este código praticamente imediatamente.

    
por 07.04.2016 / 18:50
1

Curl 000 significa um tempo limite:  - o tempo limite pode ser o resultado de um firewall bloqueando sua solicitação de sair.  - o tempo limite pode ser resultado de uma queda de conexão.  - O tempo limite também pode ser um resultado de falha ao resolver um nome de DNS.

Eu trabalhei bastante com o curl e prestei muita atenção em todos os códigos de resposta - 000 é um deles. Nos meus casos, recebi o código de resposta 000 quando qualquer uma das três condições acima foram atendidas.

De fato, estou atualmente executando (como falo) um script curl testando 2000+ uris. Exemplo do meu script (ocultando ips e nomes de domínio):

Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12142/ = 200
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12143/ = 000
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12144/ = 000
Response code from <currentip> to http://<domain_name>/category/gifts/category1/category2/12145/ = 200

Se você observar acima, o domain_name será o mesmo para todos os URLs. Enquanto alguns URLs lançam 000, outros jogam 200, o que claramente significa que não é um problema de DNS.

Se eu voltar e atingir o URL individual que gera 000, normalmente recebo 200. Nesse caso, o motivo de um 000 é um problema de conectividade.

    
por 23.05.2016 / 22:44

Tags