Corps de réponse de suppression cURL

110

Est-il possible de demander à cURL de supprimer la sortie du corps de la réponse?

Dans mon cas, le corps de la réponse est une page HTML, qui déborde du tampon CLI, ce qui rend difficile la recherche des informations pertinentes. Je veux examiner les autres parties de la sortie telles que le code de réponse HTTP, les en-têtes, etc. - tout sauf le HTML réel.

BaltoStar
la source

Réponses:

117

Vous pouvez utiliser le -ocommutateur et le nullpseudo-fichier:

Unix

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

les fenêtres

curl -s -o nul -v http://google.com
Gilles Quenot
la source
1
... si vous êtes sous Unix ;-) Pour Windows, vous voudrez peut-être utiliser nul. Voici le lien vers la documentation, peut-être que BaltoStar ressent le besoin de lire avant de demander la prochaine fois ;-) curl.haxx.se/docs/manpage.html
Marged
3
Je vous en prie. Mais c'est "nul", "null" créera un fichier avec ce nom
Marged
1
en fait, j'ai lu la page de manuel avant de publier et -s -o nulj'ai essayé, mais sur ma machine Windows, la curl -s -o nul -v http://{internal-host}/{internal-uri}page est sortie en html - j'ai essayé curl -s -o nul -v http://google.comet cela supprime la sortie comme prévu, donc je ne comprends pas pourquoi cela ne fonctionne pas pour mon site interne
BaltoStar
-one spécifie qu'une sortie URL: si vous avez plusieurs URL, il ne supprimera que la première :(
Simon Buchan
1
S'appuie sur des fichiers non portables NULet /dev/null. L'utilisation -sIXGETest une meilleure option IMO.
binki
45

Voici un moyen de supprimer toutes les sorties et en-têtes curl, avec la possibilité d'afficher toujours les erreurs si elles se produisent. Utile pour les tâches cron ou les tests automatisés.

Unix

Pour supprimer toutes les sorties:

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

Pour supprimer la sortie tout en affichant les erreurs si elles se produisent:

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

les fenêtres

Pour supprimer toutes les sorties:

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

Pour supprimer la sortie tout en affichant les erreurs si elles se produisent:

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

Paramètres expliqués

--silentsupprime les statistiques de téléchargement en cours (mais affichera toujours la sortie HTML)
--output /dev/nullmasque la sortie réussie
--show-errormontre les erreurs, même lorsque le silentmode est activé
--fail, une erreur sera générée si la réponse HTTP est un code d'erreur (404, 500, etc.) au lieu de simplement DNS / Erreurs TCP.


MISE À JOUR: Je me rends compte que l'auteur original voulait inspecter les en-têtes et le code de réponse d'une requête plutôt que de tout mettre au silence . Voir la réponse de Samael pour plus de détails sur la façon de procéder.

Simon Est
la source
2
S'appuie sur des fichiers non portables NULet /dev/null. L'utilisation -sIXGETest une meilleure option IMO.
binki
1
Merci pour le commentaire @binki - ils font en fait des choses différentes. J'ai également réalisé que l'OP voulait inspecter les en-têtes qui n'apparaissent pas dans ma solution. J'ai mis à jour ma réponse pour refléter cela.
Simon East
1
Je suppose qu'en relisant le message du PO, ils n'ont pas dit qu'ils voulaient seulement voir les en-têtes. Ils ont peut-être recherché curl -vo/dev/null/ curl -voNUL… et je ne sais pas s'il existe une variante portable de ça, hrm… ;-).
binki
Existe-t-il une commande courte pour --fail? Je pense que -sS est ce dont nous avons besoin pour --silent et --show-error
Freedo
Oui, il y a: curl -Ssfo /dev/null url. Mais soyez gentil avec les futurs responsables.
Amit Naidu
29

Lorsque vous souhaitez afficher les en-têtes mais masquer le corps de la réponse, vous souhaiterez utiliser:

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

J'avais utilisé curl -I http://somedomain.com/your/urljuste pour afficher les en-têtes de réponse. Le problème avec cela est cependant qu'il fait la demande en utilisant la HEADméthode qui n'est pas bonne lorsque vous voulez tester un appel API qui ne répond qu'à une GETdemande. C'est à cela que -X GETsert le, il change la demande en un fichier GET.

Donc, en résumé:

-smasque les barres de progression de la sortie (particulièrement utile lors du transfert vers un autre programme)
-Iaffiche les en-têtes (mais fait une HEADrequête)
-XGETconvertit la requête en GETrequête

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

samael
la source
2
C'est vraiment compliqué; curl -ifait exactement la même chose.
bfontaine
4
non, -iinclut l'en-tête HTTP dans la sortie ainsi que le corps. Essayez-le. curl -i http://google.comn'est pas le même quecurl -IXGET http://google.com
samael
Pour mes besoins (et les PO) curl -I urlest suffisant et a le même effet. J'avais juste besoin de vérifier si l'URL était réactive. Cette question aussi était simplement de supprimer le corps, ce qui HEADfonctionne bien.
Amit Naidu