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


On ne peut demander que les en-têtes utilisant HTTP HEAD, en option -I dans curl(1).

$ curl -I /

La longueur des corps de réponse HTML est une source de difficultés 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?


416
2018-04-08 03:12


origine


Réponses:


-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.

de 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 (qui 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 POSTing)

noter la - après le -D ce qui indique que la sortie "fichier" est stdout.


607
2018-04-08 04:18



Les autres réponses nécessitent le téléchargement du corps de réponse. Mais il existe un moyen de créer 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 par elle-même effectue une requête HEAD qui peut être remplacée par -X POST pour effectuer une requête POST (ou toute autre requête) et obtenir uniquement les données d'en-tête.


88
2017-07-31 00:12



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

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

ou

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

fera le travail.


37
2017-11-05 13:44



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 peuvent être différents de la réponse, car il s'agit d'une requête HEAD et non POST. Mais travaille la plupart du temps


32
2018-05-09 03:09



Beaucoup plus facile - c'est ce que j'utilise pour éviter le suivi des liens courts - est le suivant:

curl -IL http://bit.ly/in-the-shadows

... qui suit également les liens.


13
2018-03-10 21:18



Alors que les autres réponses n'ont pas fonctionné pour moi dans toutes les situations, la meilleure solution que j'ai pu trouver (travailler avec POST ainsi), pris de ici:

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


10
2018-02-14 09:23