On ne peut demander que les en-têtes utilisant HTTP HEAD, en tant qu'option -I
dans curl(1)
.
$ curl -I /
Les longs corps de réponse HTML sont difficiles à obtenir en ligne de commande, je voudrais donc obtenir uniquement l'en-tête en tant que commentaires pour mes demandes POST. Cependant, HEAD et POST sont deux méthodes différentes.
Comment faire en sorte que curl affiche uniquement les en-têtes de réponse à une demande POST?
-D, --dump-header <file>
Write the protocol headers to the specified file.
This option is handy to use when you want to store the headers
that a HTTP site sends to you. Cookies from the headers could
then be read in a second curl invocation by using the -b,
--cookie option! The -c, --cookie-jar option is however a better
way to store cookies.
et
-S, --show-error
When used with -s, --silent, it makes curl show an error message if it fails.
et
-L/--location
(HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response
code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from all requested
pages will be shown. When authentication is used, curl only sends its credentials to the initial Host. If a redirect takes curl to a different
Host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to
follow by using the --max-redirs option.
When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP
response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified
method.
depuis la page de manuel. alors
curl -sSL -D - www.acooke.org -o /dev/null
suit les redirections, vide les en-têtes sur stdout et envoie les données à/dev/null (c'est un GET, pas un POST, mais vous pouvez faire la même chose avec un POST - ajoutez simplement l'option que vous utilisez déjà pour poster des données)
notez le -
après le -D
qui indique que le "fichier" de sortie est stdout.
Les autres réponses nécessitent le téléchargement du corps de la réponse. Mais il y a un moyen de faire une demande POST qui va seulement chercher l'en-tête:
curl -s -I -X POST http://www.google.com
Un -I
effectue lui-même une demande HEAD qui peut être remplacée par -X POST
pour exécuter une demande POST (ou toute autre) et n'obtenir que l'en-tête. Les données.
La commande Suivante affiche des informations supplémentaires
curl -X POST http://httpbin.org/post -vvv > /dev/null
Vous pouvez demander au serveur d’envoyer uniquement HEAD au lieu d’une réponse complète
curl -X HEAD -I http://httpbin.org/
Note:
Les serveurs Web correctement configurés/programmés donneront une réponse différente de la publication, car il s'agit d'une demande HEAD et non de POST. Mais fonctionne la plupart du temps
Pour les corps à réponse longue (et diverses situations similaires), la solution que j’utilise est toujours de canaliser vers less
, donc
curl -i https://api.github.com/users | less
ou
curl -s -D - https://api.github.com/users | less
va faire le travail.
Beaucoup plus facile - c’est ce que j’utilise pour éviter le suivi Shortlink - est le suivant:
curl -IL http://bit.ly/in-the-shadows
… qui suit également des liens .
Bien que les autres réponses n'aient pas fonctionné pour moi dans toutes les situations, la meilleure solution que j'ai pu trouver (en travaillant avec POST
également), tirée de ici :
curl -vs 'https://some-site.com' 1> /dev/null
C'est peut-être un peu extrême, mais j'utilise cette version très courte:
curl -svo. <URL>
Explication:
-v
affiche les informations de débogage (qui incluent les en-têtes)
-o.
envoie les données de la page Web (que nous voulons ignorer) à un certain fichier, .
, dans ce cas, qui est un répertoire et une destination non valide, ce qui rend la sortie ignorée.
-s
pas de barre de progression, pas d'information d'erreur (sinon, vous verriez Warning: Failed to create the file .: Is a directory
)