Ich möchte die Kopfzeilen der Anfrage sehen, die von curl
wenn ich eine Anfrage an den Server sende. Wie kann ich das überprüfen?
Sie ist an oberster Stelle aufgeführt
Ich möchte die Kopfzeilen der Anfrage sehen, die von curl
wenn ich eine Anfrage an den Server sende. Wie kann ich das überprüfen?
Ich habe die Antworten hier ausprobiert und festgestellt, dass die nützlichste und einfachste Antwort noch nicht als Antwort aufgeführt ist, aber sie ist es:
curl -v https://example.com/path
Dies druckt die ANFRAGE Kopfzeilen als auch die ANTWORT Header sowie weitere nützliche Informationen wie das SSL-Zertifikat und ob eine bestehende TCP-Verbindung wiederverwendet wurde. -v
Flag kann natürlich mit anderen Flags kombiniert werden, z. B. um Weiterleitungen zu folgen und eine HTTP-Authentifizierung zu verlangen:
curl -vL --user my_username https://example.com/path
Ich hoffe, das hilft.
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 zusammenfassensed
- 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 '>' entfernens/< //
- Präfix '<' entfernenIch weiß, es ist ein bisschen spät, aber meine bevorzugte Methode dafür ist netcat
da Sie genau das bekommen, was Sie brauchen. curl
gesendet; dies kann sich von der --trace
o --trace-ascii
Optionen, die Nicht-ASCII-Zeichen nicht richtig anzeigen (sie werden nur als Punkte angezeigt oder müssen dekodiert werden).
Sie können dies ganz einfach tun, indem Sie zwei Terminal-Fenster öffnen, im ersten Typ:
nc -l localhost 12345
Dies öffnet einen abhörenden Prozess auf Port 12345 Ihres lokalen Rechners.
Im zweiten Terminal-Fenster geben Sie Ihren curl-Befehl ein, zum Beispiel:
curl --form 'foo=bar' localhost:12345
Im ersten Terminalfenster sehen Sie genau was curl in der Anfrage gesendet hat.
Jetzt natürlich nc
sendet keine Antwort (es sei denn, Sie geben sie selbst ein), so dass Sie den Befehl curl (control-c) unterbrechen und den Vorgang für jeden Test wiederholen müssen.
Dies ist jedoch eine nützliche Option, um Ihre Anfrage zu debuggen, da Sie nirgendwo einen Roundtrip durchführen oder falsche, sich wiederholende Anfragen erzeugen, bis Sie es richtig gemacht haben; wenn Sie mit dem Befehl zufrieden sind, leiten Sie ihn einfach an eine gültige URL um und Sie sind fertig.
Sie können dasselbe auch für jede andere cURL-Bibliothek tun, indem Sie Ihre Anfrage so bearbeiten, dass sie auf die lokale nc
hören Sie zu, bis Sie damit zufrieden sind.
Bewerten Sie dies. Es ist der sauberste Weg, um mit absoluter Sicherheit zu sehen, was genau curl sendet. Die meisten Leute antworteten mit einer Variation von curl -v
was grundsätzlich funktioniert, aber auch jede Menge anderes Rauschen abwirft, insbesondere für HTTPS.
Ich stimme @Yitz vollkommen zu. Wenn Sie nur daran interessiert sind, was von curl gesendet wurde (und sich nicht für die Netzwerkdetails interessieren), ist dies der beste Weg.
Das hat wunderbar funktioniert. Pro-Tipp - wenn Sie Arch Linux ARM verwenden und es nicht funktioniert, verwenden Sie sudo pacman -S openbsd-netcat
. Siehe: bbs.archlinux.org/viewtopic.php?id=171551
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.
0 Stimmen
Diese URL könnte hilfreich sein. helloacm.com/curl
1 Stimmen
Sie können damit Folgendes testen run-node.com/now-use-curl-with-http-echo-com