Obtenir uniquement l’en-tête de réponse de HTTP POST en utilisant curl

On ne peut demander que les en-têtes à l’aide de HTTP HEAD, comme option -I dans curl(1) .

 $ curl -I / 

La longueur des corps de réponse HTML est un peu pénible pour accéder à la ligne de commande. Je voudrais donc obtenir uniquement l’en-tête comme commentaire pour mes requêtes POST. Cependant, HEAD et POST sont deux méthodes différentes.

Comment puis-je obtenir curl pour afficher uniquement les en-têtes de réponse à une requête POST?

 -D, --dump-header  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. 

à partir de la page de manuel. alors

 curl -sSL -D - www.acooke.org -o /dev/null 

suit les redirections, sauvegarde 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 les données POST)

notez le - après le -D qui indique que la sortie “fichier” est stdout.

Les autres réponses nécessitent le téléchargement du corps de réponse. Mais il existe un moyen de faire une requête POST qui ne récupère que l’en-tête:

 curl -s -I -X POST http://www.google.com 

Un -I effectue lui-même une requête HEAD qui peut être remplacée par -X POST pour exécuter une requête POST (ou toute autre) et n’obtient toujours que les données d’en-tête.

Pour les corps à réponse longue (et diverses autres situations similaires), la solution que j’utilise est toujours de

 curl -i https://api.github.com/users | less 

ou

 curl -s -D - https://api.github.com/users | less 

fera le travail.

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 simplement HEAD, au lieu de la réponse complète

 curl -X HEAD -I http://httpbin.org/ 

Note: Certains serveurs Web configurés / programmés de manière incorrecte risquent de répondre différemment à la publication car il s’agit d’une demande HEAD et non POST. Mais fonctionne la plupart du temps

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 les 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 collaboration avec POST ), prise ici :

curl -vs 'https://some-site.com' 1> /dev/null