cURL sopprime il corpo della risposta


110

È possibile istruire cURL a sopprimere l'output del corpo della risposta?

Nel mio caso, il corpo della risposta è una pagina HTML, che supera il buffer CLI, rendendo difficile trovare le informazioni rilevanti. Voglio esaminare le altre parti dell'output come il codice di risposta HTTP, le intestazioni, ecc.Tutto tranne l'effettivo HTML.

Risposte:


117

Puoi usare lo -oswitch e lo nullpseudo-file:

Unix

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

finestre

curl -s -o nul -v http://google.com

1
... se sei su Unix ;-) Per Windows potresti voler usare nul. Ecco il link ai documenti, forse BaltoStar sente il bisogno di leggere prima di chiedere la prossima volta ;-) curl.haxx.se/docs/manpage.html
Marged

3
Prego. Ma è "nul", "null" creerà un file con quel nome
Marged

1
in effetti ho letto la pagina man prima di postare e -s -o nulho provato, ma curl -s -o nul -v http://{internal-host}/{internal-uri}sull'intero html della pagina di output della mia macchina Windows - ho provato curl -s -o nul -v http://google.come sopprime l'output come previsto, quindi non capisco perché questo non funziona per il mio sito interno
BaltoStar

-ospecifica solo un output URL: se hai più URL, verrà eliminato solo il primo :(
Simon Buchan

1
Si basa su non portatili NULe /dev/null. L'utilizzo -sIXGETè un'opzione migliore IMO.
binki

45

Ecco un modo per sopprimere tutto l'output e le intestazioni di curl, con la possibilità di mostrare ancora gli errori se si verificano. Utile per cron job o test automatici.

Unix

Per sopprimere tutto l'output:

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

Per sopprimere l'output ma mostrare comunque gli errori se si verificano:

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

finestre

Per sopprimere tutto l'output:

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

Per sopprimere l'output ma mostrare comunque gli errori se si verificano:

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

Parametri spiegati

--silentsopprime le statistiche di download in corso (ma mostrerà comunque l'output HTML)
--output /dev/nullnasconde l'output riuscito
--show-errormostra errori, anche quando la silentmodalità è abilitata
--failgenererà un errore se la risposta HTTP è un codice di errore (404, 500 ecc.) invece che semplicemente DNS / Errori TCP.


AGGIORNAMENTO: mi rendo conto che l'autore originale voleva ispezionare le intestazioni e il codice di risposta di una richiesta piuttosto che mettere a tacere tutto . Vedi la risposta di samael per i dettagli su come farlo.


2
Si basa su non portatili NULe /dev/null. L'utilizzo -sIXGETè un'opzione migliore IMO.
binki

1
Grazie per il commento @binki - in realtà fanno cose diverse. Ho anche realizzato che l'OP voleva ispezionare le intestazioni che non vengono visualizzate nella mia soluzione. Ho aggiornato la mia risposta per riflettere questo.
Simon East

1
Immagino che nel rileggere il post dell'OP non abbiano detto che volevano solo vedere le intestazioni. Potrebbero effettivamente aver cercato curl -vo/dev/null/ curl -voNUL... e non so se esiste una variante portatile di quello, hrm ... ;-).
binki

C'è un breve comando per --fail? Penso che -sS sia ciò di cui abbiamo bisogno sia per --silent che per --show-error
Freedo

Sì, c'è: curl -Ssfo /dev/null url. Ma sii gentile con i futuri manutentori.
Amit Naidu

29

Quando vuoi mostrare le intestazioni ma nascondere il corpo della risposta, ti consigliamo di usare:

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

Usavo curl -I http://somedomain.com/your/urlsolo per mostrare le intestazioni di risposta. Il problema con questo però è che effettua la richiesta utilizzando il HEADmetodo che non va bene quando si desidera testare una chiamata API che risponde solo a una GETrichiesta. Questo è ciò che -X GETserve, cambia la richiesta in un file GET.

Quindi, in sintesi:

-snasconde le barre di avanzamento dall'output (particolarmente utile quando si collega a un altro programma)
-Imostra le intestazioni (ma fa una HEADrichiesta)
-XGETconverte la richiesta in una GETrichiesta

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


2
È davvero complicato; curl -ifa esattamente la stessa cosa.
bfontaine

4
no, -iinclude l'intestazione HTTP nell'output e nel corpo. Provalo. curl -i http://google.comnon è la stessa dicurl -IXGET http://google.com
samael

Per i miei scopi (e per i PO) curl -I urlè sufficiente e ha lo stesso effetto. Avevo solo bisogno di controllare se l'URL fosse reattivo. Anche questa domanda riguardava semplicemente la soppressione del corpo, il che HEADfa bene.
Amit Naidu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.