cURL suprimir corpo de resposta

110

É possível instruir cURL para suprimir a saída do corpo de resposta?

No meu caso, o corpo da resposta é uma página HTML, que estourou o buffer CLI, tornando difícil encontrar as informações relevantes. Quero examinar as outras partes da saída, como código de resposta HTTP, cabeçalhos, etc - tudo, exceto o HTML real.

BaltoStar
fonte

Respostas:

117

Você pode usar a -oopção e o nullpseudo-arquivo:

Unix

curl -s -o /dev/null -v http://google.com

janelas

curl -s -o nul -v http://google.com
Gilles Quenot
fonte
1
... se você estiver no Unix ;-) Para Windows, você pode querer usar nul. Aqui está o link para os docs, talvez BaltoStar se sente à vontade para ler antes de pedir próxima vez ;-) curl.haxx.se/docs/manpage.html
Marged
3
Você é bem vindo. Mas é "nul", "null" criará um arquivo com esse nome
Marcado em
1
Na verdade, eu li a página de manual antes de postar e tentei, -s -o nulmas na minha máquina com Windows curl -s -o nul -v http://{internal-host}/{internal-uri}produz o html inteiro da página - eu tentei curl -s -o nul -v http://google.come suprime a saída conforme o esperado, então não estou entendendo por que isso não funciona no meu site interno
BaltoStar
-oespecifica apenas um resultado de URLs: se você tiver vários URLs, ele descartará apenas o primeiro :(
Simon Buchan
1
Baseia-se em não portátil NULe /dev/null. Usar -sIXGETé uma opção melhor IMO.
binki de
45

Esta é uma maneira de suprimir todas as saídas e cabeçalhos curl, com a opção de ainda mostrar erros se eles ocorrerem. Útil para tarefas cron ou testes automatizados.

Unix

Para suprimir todas as saídas:

curl --silent --output /dev/null http://example.com

Para suprimir a saída, mas ainda mostrar erros, caso ocorram:

curl --silent --output /dev/null --show-error --fail http://example.com

janelas

Para suprimir todas as saídas:

curl --silent --output nul http://example.com

Para suprimir a saída, mas ainda mostrar erros, caso ocorram:

curl --silent --output nul --show-error --fail http://example.com

Parâmetros explicados

--silentsuprime as estatísticas de download em andamento (mas ainda exibe a saída HTML)
--output /dev/nulloculta os
--show-errorerros de exibição de saída bem-sucedida , mesmo quando o silentmodo está habilitado
--failirá gerar um erro se a resposta HTTP for um código de erro (404, 500 etc.) em vez de meramente DNS / Erros de TCP.


ATUALIZAÇÃO: percebo que o autor original queria inspecionar os cabeçalhos e o código de resposta de uma solicitação em vez de silenciar tudo . Veja a resposta de samael para detalhes sobre como fazer isso.

Simon East
fonte
2
Baseia-se em não portátil NULe /dev/null. Usar -sIXGETé uma opção melhor IMO.
binki de
1
Obrigado pelo comentário @binki - eles realmente fazem coisas diferentes. Também percebi que o OP queria inspecionar os cabeçalhos que não aparecem na minha solução. Eu atualizei minha resposta para refletir isso.
Simon East
1
Acho que ao reler a postagem do OP eles não disseram que queriam ver os cabeçalhos. Eles podem realmente estar procurando por curl -vo/dev/null/ curl -voNUL... e eu não sei se existe uma variante portátil disso, hrm ... ;-).
binki
Existe um comando curto para --fail? Acho que -sS é o que precisamos para --silent e --show-error
Freedo
Sim, existe: curl -Ssfo /dev/null url. Mas seja legal com os futuros mantenedores.
Amit Naidu
29

Quando você quiser mostrar cabeçalhos, mas ocultar o corpo da resposta, use:

curl -sIXGET http://somedomain.com/your/url

Eu estava usando curl -I http://somedomain.com/your/urlapenas para mostrar cabeçalhos de resposta. O problema com isso é que ele faz a solicitação usando o HEADmétodo que não é bom quando você quer testar uma chamada de API que responde apenas a uma GETsolicitação. -X GETÉ para isso que serve, ele muda a solicitação para a GET.

Então, em resumo:

-soculta as barras de progresso da saída (especialmente útil ao canalizar para outro programa)
-Imostra cabeçalhos (mas faz uma HEADsolicitação)
-XGETconverte a solicitação de volta em uma GETsolicitação

consulte: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

samael
fonte
2
Isso é muito complicado; curl -ifaz exatamente a mesma coisa.
bfontaine
4
não, -iinclui o cabeçalho HTTP na saída, bem como no corpo. Tente. curl -i http://google.comnão é o mesmo quecurl -IXGET http://google.com
samael
Para os meus propósitos (e os OP's) curl -I urlé suficiente e tem o mesmo efeito. Eu só precisava verificar se o url respondia. Essa questão também era apenas sobre suprimir o corpo, o que HEADfunciona bem.
Amit Naidu