782 Stimmen

Anzeige von Anfrage-Headern mit der Kommandozeile curl

Die Kommandozeile curl kann den Antwort-Header anzeigen, indem sie -D Option, aber ich möchte sehen, welchen Request Header er sendet. Wie kann ich das tun?

40 Stimmen

curl --head http://google.com tut dasselbe wie die -I Flagge :)

16 Stimmen

Hinweis zur Verwendung --head / -I : Nicht alle Server reagieren genau gleich auf HEAD Anfragen (zum Beispiel, Content-Encoding fehlen würde, wenn Sie versuchen würden, zu überprüfen, ob der Body gzipped ist) und nicht alle Server unterstützen HEAD . -v ist in der Regel die sicherere Wahl.

5 Stimmen

17voto

igorpcholkin Punkte 898

Ein Befehl wie der folgende zeigt drei Abschnitte an: Anforderungskopfzeilen, Antwortkopfzeilen und Daten (durch CRLF getrennt). Er vermeidet technische Informationen und syntaktisches Rauschen, das von 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 - Kopfzeilen hinzufügen (-v), aber Fortschrittsbalken entfernen (-s)
  • 2>&1 - stdout und stderr zu einem einzigen stdout zusammenfassen
  • sed - die von curl erzeugte Antwort mit den folgenden Befehlen bearbeiten
  • /^* /d - Zeilen, die mit '* ' beginnen, entfernen (technische Informationen)
  • /bytes data]$/d - Zeilen, die mit 'bytes data]' enden, entfernen (technische Informationen)
  • s/> // - Präfix '>' entfernen
  • s/< // - Präfix '<' entfernen

11voto

jpfx1342 Punkte 768

Ich selbst musste dieses Problem bei der Fehlersuche in Webanwendungen überwinden. -v ist großartig, aber ein wenig zu für meinen Geschmack zu langatmig. 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 wird an stderr und nicht an stdout gesendet. Indem wir dies an eine Subshell umleiten, können wir sed um Zeilen zu entfernen, die mit * . Da die eigentliche Ausgabe nicht durch die Unterschale läuft, wird sie nicht beeinflusst. Die Verwendung einer Subshell ist etwas umständlich, aber es ist der einfachste Weg, um stderr auf einen anderen Befehl umzuleiten. (Wie ich bereits erwähnt habe, verwende ich dies nur zu Testzwecken, so dass es für mich gut funktioniert).

7voto

Sudharshan Punkte 3108

Wenn Sie mehr Alternativen wünschen, können Sie versuchen, einen modernen Kommandozeilen-HTTP-Client wie httpie das für die meisten Betriebssysteme mit Paketmanagern wie brew, apt-get, pip, yum usw. verfügbar ist

z.B.:- Für OSX

brew install httpie

Dann können Sie verwenden. auf der Kommandozeile mit verschiedenen Optionen

http GET https://www.google.com

enter image description here

6voto

toolchainX Punkte 1878

Die Option -v für curl ist zu ausführlich in der Fehlerausgabe, die den führenden * (Statuszeile) oder > (Anforderungshauptfeld) oder < (Antwort-Kopffeld). um nur das Anfrage-Kopffeld zu erhalten:

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

um nur das Kopffeld der Anfrage zu erhalten:

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

oder sie in /tmp/test.txt Datei mit der Option -D

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

zu filtern, um die -v ausgeben, sollten Sie die Fehlerausgabe ins Terminal und die Standardausgabe nach /dev/null leiten, die Option -s verbietet die Fortschrittsanzeige

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X