Eu estava sempre assumindo que, quando o curl recebia uma resposta HTTP 500, estava retornando um código de saída que significava falha (! = 0), mas esse parece não ser o caso.
Existe uma maneira de fazer com que o cURL falhe com um exitCode diferente de 0 se o código de status HTTP não for 200? Eu sei que posso usar, -w "%{http_code}"
mas isso o coloca em STDOUT, não como o código de saída (além disso, também estou interessado em capturar a saída, que não quero redirecionar para um arquivo, mas para a tela).
fonte
curl -f -L
e consulte esta pergunta para obter detalhes sobre o que-L
faz.Se você quiser apenas exibir o conteúdo da página ondulada, faça o seguinte:
Isso grava o conteúdo da página em STDERR enquanto grava o código de status HTTP em STDOUT, para que possa ser atribuído à variável STATUSCODE .
fonte
0
código não de status do script?if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
?{ code=$(curl ... as above ...); } 2>&1
O truque é{ ... } 2>&1
que permite redirecionar, sem gerar um shell diferente como( ... )
faria.Consegui fazer isso usando uma combinação de sinalizadores:
curl --silent --show-error --fail URL
--silent oculta o progresso e o erro
--show-error mostra a mensagem de erro oculta por
--silent
--fail retorna um código de saída> 0 quando a solicitação falha
fonte
--silent --show-error --fail
funciona o mesmo que apenas-f/--fail
.--fail
retorna o código de saída22
, conforme documentado .Sim, existe uma maneira de fazer isso, mas está longe de ser óbvio, pois envolve três opções de ondulação:
Isso garante que o sucesso (0) ocorra somente quando o enrolamento finalizar com o
2xx
código de retorno final e questdout
obtém o corpo e que quaisquer erros sejam exibidos no stderr.Observe que a documentação do curl pode confundir um pouco você, pois menciona que --fail pode ter êxito em alguns códigos 401. Com base em testes que não são verdadeiros, pelo menos não quando usados com --show-error ao mesmo tempo.
Até o momento, não consegui encontrar nenhum caso em que o curl retornasse êxito quando não havia um http com êxito com essas opções.
fonte