Question Comment afficher les en-têtes de requête avec la ligne de commande curl


La ligne de commande curl peut afficher l’en-tête de réponse en utilisant -D option, mais je veux voir quel en-tête de demande il envoie. Comment puis je faire ça?


412
2017-07-15 06:02


origine


Réponses:


Curl -v ou --verbose L'option affiche les en-têtes de la requête HTTP, entre autres choses. Voici quelques exemples de sortie:

$ curl -v http://google.com/
* About to connect() to google.com port 80 (#0)
*   Trying 66.102.7.104... connected
* Connected to google.com (66.102.7.104) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.16.4 (i386-apple-darwin9.0) libcurl/7.16.4 OpenSSL/0.9.7l zlib/1.2.3
> Host: google.com
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Date: Thu, 15 Jul 2010 06:06:52 GMT
< Expires: Sat, 14 Aug 2010 06:06:52 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 1; mode=block
< 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact
* Closing connection #0

627
2017-07-15 06:07



curl -sD - -o /dev/null http://example.com
  • -s - Éviter d'afficher la barre de progression
  • -D - - Dump des en-têtes dans un fichier, mais - l'envoie à stdout
  • -o /dev/null - Ignorer le corps de réponse

C'est mieux que -I comme il n'envoie pas HEAD demande, ce qui peut produire des résultats différents.

C'est mieux que -v parce que vous n'avez pas besoin de tant de hacks pour ne pas le verbaliser.


100
2017-10-30 03:18



Je crois que l'interrupteur de ligne de commande que vous cherchez à passer à curl est -I.

Exemple d'utilisation:

$ curl -I http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287  
HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Dec 2012 15:22:05 GMT
Server: Apache
Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/
Content-Type: text/html; charset=iso-8859-1

En outre, si vous rencontrez un code d’état HTTP de réponse de 301, vous pouvez également passer un -L argument passer à dire curl suivre les redirections d'URL et, dans ce cas, imprimer les en-têtes de toutes les pages (y compris les redirections d'URL), illustrées ci-dessous:

$ curl -I -L http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287
HTTP/1.1 301 Moved Permanently
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Location: http://heatmiser.counterhack.com/zone-5-15614E3A-CEA7-4A28-A85A-D688CC418287/
Content-Type: text/html; charset=iso-8859-1

HTTP/1.1 302 Found
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Set-Cookie: UID=b8c37e33defde51cf91e1e03e51657da
Location: noaccess.php
Content-Type: text/html

HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 15:22:13 GMT
Server: Apache
Content-Type: text/html

80
2017-12-29 15:26



L'option verbeuse est pratique, mais si vous voulez voir tout que curl fait (y compris le corps HTTP qui est transmis, et pas seulement les en-têtes), je suggère d'utiliser l'une des options ci-dessous:

  • --trace-ascii - # stdout
  • --trace-ascii output_file.txt # fichier

58
2018-05-27 03:23



Vous obtenez une belle sortie d'en-tête avec la commande suivante:

 curl -L -v -s -o /dev/null google.de
  • -L, --location suivre les redirections
  • -v, --verbose  plus de sortie, indique la direction
  • -s, --silent   ne pas afficher une barre de progression
  • -o, --output /dev/null ne montre pas le corps reçu

Ou la version plus courte:

 curl -Lvso /dev/null google.de

Résulte en:

* Rebuilt URL to: google.de/
*   Trying 2a00:1450:4008:802::2003...
* Connected to google.de (2a00:1450:4008:802::2003) port 80 (#0)
> GET / HTTP/1.1
> Host: google.de
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.de/
< Content-Type: text/html; charset=UTF-8
< Date: Fri, 12 Aug 2016 15:45:36 GMT
< Expires: Sun, 11 Sep 2016 15:45:36 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 218
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
<
* Ignoring the response-body
{ [218 bytes data]
* Connection #0 to host google.de left intact
* Issue another request to this URL: 'http://www.google.de/'
*   Trying 2a00:1450:4008:800::2003...
* Connected to www.google.de (2a00:1450:4008:800::2003) port 80 (#1)
> GET / HTTP/1.1
> Host: www.google.de
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 12 Aug 2016 15:45:36 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: NID=84=Z0WT_INFoDbf_0FIe_uHqzL9mf3DMSQs0mHyTEDAQOGY2sOrQaKVgN2domEw8frXvo4I3x3QVLqCH340HME3t1-6gNu8R-ArecuaneSURXNxSXYMhW2kBIE8Duty-_w7; expires=Sat, 11-Feb-2017 15:45:36 GMT; path=/; domain=.google.de; HttpOnly
< Accept-Ranges: none
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
<
{ [11080 bytes data]
* Connection #1 to host www.google.de left intact

Comme vous pouvez le voir curl affiche à la fois les en-têtes sortantes et entrantes et ignore le bodydata, même s'il vous dit quelle est la taille du corps.

De plus, pour chaque ligne, la direction est indiquée afin de faciliter la lecture. J'ai trouvé particulièrement utile de tracer de longues chaînes de redirections.


35
2017-08-12 15:56



J'ai dû résoudre ce problème moi-même lors du débogage d'applications Web. -v c'est génial, mais un peu aussi verbeux à mon goût. C’est la solution que j’ai imaginée:

curl -v http://example.com/ 2> >(sed '/^*/d')

Cela fonctionne parce que la sortie de -v est envoyé à stderr, pas stdout. En redirigeant cela vers un sous-shell, nous pouvons sed pour supprimer les lignes qui commencent par *. Puisque la sortie réelle ne traverse pas le sous-shell, elle n'est pas affectée. Utiliser un sous-shell est un peu lourd, mais c'est le moyen le plus simple de rediriger stderr vers une autre commande. (Comme je l’ai noté, je ne l’utilise que pour les tests, donc ça marche bien pour moi.)


6
2018-05-23 17:43



l'option -v pour curl est trop verbeuse dans la sortie d'erreur qui contient le premier *(ligne d'état) ou >(champ de la tête de la demande) ou <(champ de la tête de réponse). pour obtenir uniquement le champ d'en-tête de la requête:

curl -v -sS www.stackoverflow.com 2>&1 >/dev/null | grep '>' | cut -c1-2 --complement

pour obtenir uniquement le champ d'en-tête de la requête:

curl -v -sS www.stackoverflow.com 2>&1 >/dev/null | grep '<' | cut -c1-2 --complement

ou pour le jeter dans /tmp/test.txt fichier avec l'option -D

curl -D /tmp/test.txt -sS www.stackoverflow.com > /dev/null

afin de filtrer le -v sortie, vous devez diriger la sortie d'erreur vers le terminal et la sortie std vers / dev / null, l'option -s est d'interdire la mesure de la progression


3
2017-10-27 14:52



Si vous voulez plus d'alternatives, vous pouvez essayer d'installer un client HTTP de ligne de commande moderne comme httpie qui est disponible pour la plupart des systèmes d'exploitation avec des gestionnaires de paquets tels que brew, apt-get, pip, yum, etc.

par exemple: - Pour OSX

brew install httpie

Ensuite vous pouvez utilisation il en ligne de commande avec diverses options

http GET https://www.google.com

enter image description here


1
2018-04-22 09:53



en php définir les options de curl

CURLINFO_HEADER_OUT => true,

CURLOPT_HEADER => 1,

et peut-être vider le résultat de l'en-tête dans mysql .. pour une journalisation plus facile.

peut également utiliser wireshark si vous utilisez le navigateur pour plus de détails que ce que donne F12 / Firebug


-18
2017-07-22 22:52