wake-up-neo.com

So zeigen Sie Anforderungsheader mit Befehlszeilen-Curl an

Befehlszeilencurl kann Antwortheader mithilfe der Option -D anzeigen. Ich möchte jedoch sehen, welchen Anforderungsheader er sendet. Wie kann ich das machen?

444
wwwxml

die Option -v oder --verbose von curl zeigt unter anderem die HTTP-Anforderungsheader. Hier ist eine Beispielausgabe:

$ 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
653
Asaph
curl -sD - -o /dev/null http://example.com
  • -s - Vermeiden Sie die Anzeige des Fortschrittsbalkens
  • -D - - Kopfzeilen in eine Datei ausgeben, aber - sendet sie an stdout
  • -o /dev/null - Antworttext ignorieren

Dies ist besser als -I, da keine HEAD-Anforderung gesendet wird, die zu unterschiedlichen Ergebnissen führen kann.

Es ist besser als -v, weil Sie nicht so viele Hacks brauchen, um das Wort zu verbannen.

132
Jaffa The Cake

Ich glaube, der Befehlszeilenschalter, den Sie suchen, um an curl zu übergeben, ist -I.

Verwendungsbeispiel:

$ 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

Wenn Sie einen Antwort-HTTP-Statuscode 301 erhalten, können Sie auch einen -L-Argumentwechsel übergeben, um curl anzuweisen, URL-Weiterleitungen zu folgen, und in diesem Fall die Header aller Seiten (einschließlich der URL-Weiterleitungen) zu drucken unten dargestellt:

$ 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
86
evandrix

Die ausführliche Option ist praktisch, aber wenn Sie alles sehen möchten, das curl macht (einschließlich des HTTP-Körpers, der übertragen wird, und nicht nur der Header), empfehle ich die folgenden Optionen:

  • --trace-ascii - # stdout
  • --trace-ascii output_file.txt # datei
66
William Denniss

Sie erhalten eine Nice-Header-Ausgabe mit dem folgenden Befehl:

 curl -L -v -s -o /dev/null google.de
  • -L, --location Umleitungen folgen
  • -v, --verbose mehr Ausgabe, gibt die Richtung an
  • -s, --silent zeigt keinen Fortschrittsbalken an
  • -o, --output /dev/null zeigt den empfangenen Body nicht an

Oder die kürzere Version:

 curl -Lvso /dev/null google.de

Ergebnisse in:

* 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

Wie Sie sehen, gibt curl sowohl die abgehenden als auch die ankommenden Header aus und überspringt die Bodydaten, obwohl Sie wissen, wie groß der Körper ist.

Zusätzlich wird für jede Zeile die Richtung angegeben, so dass sie gut lesbar ist. Ich fand es besonders nützlich, lange Ketten von Weiterleitungen aufzuspüren.

45
Benibr

Dieses Problem musste ich beim Debuggen von Webanwendungen selbst überwinden. -v ist großartig, aber für meinen Geschmack etwas auch verbose. Dies ist die (nur Bash) -Lösung, die ich mir ausgedacht habe:

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

Dies funktioniert, weil die Ausgabe von -v an stderr und nicht an stdout gesendet wird. Durch Umleiten auf eine Subshell können Sie sed Zeilen entfernen, die mit * beginnen. Da die reale Ausgabe die Subshell nicht durchläuft, ist sie nicht betroffen. Die Verwendung einer Subshell ist etwas schwerfällig, aber es ist der einfachste Weg, stderr auf einen anderen Befehl umzuleiten. (Wie ich bereits erwähnt habe, benutze ich das nur zum Testen, also funktioniert es gut für mich.)

6
jpfx1342

die Option -v für curl ist in der Fehlerausgabe zu ausführlich, die den führenden * (Statuszeile) oder > (Anforderungskopffeld) oder < (Antwortkopffeld) enthält. um nur das Feld für den Anforderungskopf zu erhalten:

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

um nur das Feld für den Anforderungskopf zu erhalten:

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

oder um es mit der Option -D in /tmp/test.txt-Datei zu speichern

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

um die -v-Ausgabe zu filtern, sollten Sie die Fehlerausgabe an das Terminal und die Standardausgabe an/dev/null weiterleiten. Die Option -s soll die Fortschrittsmessung verbieten

3
toolchainX

Ein Befehl wie der folgende zeigt drei Abschnitte: Anforderungsheader, Antwortheader und Daten (getrennt durch CRLF). Es vermeidet technische Informationen und syntaktisches Rauschen, das durch curl hinzugefügt wird.

curl -vs www.stackoverflow.com 2>&1 | sed '/^* /d; /bytes data]$/d; s/> //; s/< //'

Der Befehl erzeugt die folgende Ausgabe:

GET / HTTP/1.1
Host: www.stackoverflow.com
User-Agent: curl/7.54.0
Accept: */*

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: https://stackoverflow.com/
Content-Length: 149
Accept-Ranges: bytes
Date: Wed, 16 Jan 2019 20:28:56 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-bma1622-BMA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1547670537.588756,VS0,VE105
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Set-Cookie: prov=e4b211f7-ae13-dad3-9720-167742a5dff8; domain=.stackoverflow.com; expires=Fri, 01-Jan-2055 00:00:00 GMT; path=/; HttpOnly

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="https://stackoverflow.com/">here</a></body>

Beschreibung:

  • -vs - Header hinzufügen (-v), Fortschrittsbalken entfernen (-s)
  • 2>&1 - kombiniere stdout und stderr zu einem einzigen stdout
  • sed - Antwort bearbeiten, die von curl mit den folgenden Befehlen erzeugt wird
  • /^* /d - Zeilen, die mit '*' beginnen, entfernen (technische Info)
  • /bytes data]$/d - Zeilen entfernen, die mit 'bytes data] enden' (technische Info)
  • s/> // - Entferne '>' Präfix
  • s/< // - Entferne das Präfix '<'
0
igorpcholkin