Ich benutze Curl, um http-Header dazu zu bringen, den http-Statuscode zu finden und auch eine Antwort zurückzugeben. Ich bekomme die http-Header mit dem Befehl
curl -I http://localhost
Um die Antwort zu erhalten, benutze ich den Befehl
curl http://localhost
Sobald ich das Flag -I benutze, bekomme ich nur die Header und die Antwort ist nicht mehr da. Gibt es eine Möglichkeit, sowohl die http-Antwort als auch den Header / http-Statuscode in einem Befehl abzurufen?
Antworten:
Ich konnte eine Lösung finden, indem ich mir das Curl-Dokument ansah, in dem angegeben ist,
-
dass die Ausgabe verwendet werden soll, um die Ausgabe auf stdout zu bringen.Um die Antwort nur mit dem http-Rückkehrcode zu erhalten, könnte ich einfach tun
quelle
-i
. Oder vielleicht,-v
wenn Sie auch zusätzliche Informationen mögen.-o -I
Am Ende wird eine Datei mit dem wörtlichen Namen '-I
' im CWD erstellt. Hat das noch jemand gesehen? Die Lösung dafür ist-o/dev/null -I
Der ausführliche Modus sagt Ihnen alles
quelle
Ich benutze diesen Befehl, um den Statuscode ohne andere Ausgabe zu drucken. Außerdem wird nur eine HEAD-Anforderung ausgeführt und die Umleitung (bzw.
-I
und-L
) befolgt .Dies macht es sehr einfach, den Statuscode in einem Integritätsskript zu überprüfen:
quelle
curl -o -I -L -s -w "%{http_code}" http://localhost
eine Datei mit dem Namen erstellt.-I
Um dies zu-o
/dev/null
curl -o /dev/null -I -L -s -w "%{http_code}" http://localhost
Ich habe diese Frage gefunden, weil ich sowohl die Antwort als auch den Inhalt haben wollte, um dem Benutzer eine Fehlerbehandlung hinzuzufügen.
Sie können den HTTP-Statuscode drucken, um den Inhalt zu standardisieren und in eine andere Datei zu schreiben.
Auf diese Weise können Sie mithilfe der Logik entscheiden, ob die Antwort eine Verarbeitung wert ist.
quelle
Die
-i
Option ist die, die Sie möchten:Alternativ können Sie die ausführliche Option verwenden:
quelle
Ich habe das benutzt:
Um den HTTP-Status zu erhalten
Um den Antworttext zu erhalten, habe ich diesen verwendet
quelle
Dieser Befehl
wird den durch Kommas getrennten Körper und Status erhalten; Sie können sie teilen, um sie herauszuholen.
Sie können das Trennzeichen nach Belieben ändern.
quelle
Für die programmatische Verwendung verwende ich Folgendes:
Es zeigt folgende Ausgabe:
quelle
Dies ist eine Möglichkeit, den Text "UND" des Statuscodes abzurufen und ihn auf einen geeigneten JSON oder ein für Sie geeignetes Format zu formatieren. Einige mögen argumentieren, dass es die falsche Verwendung der Schreibformatoption ist, aber dies funktioniert für mich, wenn ich sowohl Text- als auch Statuscode in meinen Skripten benötige, um den Statuscode zu überprüfen und die Antworten vom Server weiterzuleiten.
Führen Sie den obigen Code aus und Sie sollten einen JSON in diesem Format zurückerhalten:
Mit der Option -w Schreibformat können Sie, da stderr zuerst gedruckt wird, Ihre Ausgabe mit dem var http_code formatieren und den Hauptteil der Antwort in einen Wert (body) einfügen und das Einschließen mit var stdout verfolgen. Leiten Sie dann Ihre stderr-Ausgabe auf stdout um, und Sie können sowohl http_code als auch den Antworttext zu einer übersichtlichen Ausgabe kombinieren
quelle
curl: unknown --write-out variable: 'stderr'
curl: unknown --write-out variable: 'stdout'
Mein Weg, um dies zu erreichen :
Um beides zu bekommen (Header und Body), führe ich normalerweise ein
curl -D- <url>
wie in:Dadurch werden die Header (
-D
) an stdout (-
) ausgegeben (--dump-header
in man curl suchen ).IMHO auch in diesem Zusammenhang sehr praktisch:
Ich benutze oft jq , um diese json-Daten (z. B. von einigen Rest-APIs) zu formatieren. Da jq jedoch keinen HTTP-Header erwartet, besteht der Trick darin, Header mit stderr zu drucken
-D/dev/stderr
. Beachten Sie, dass wir diesmal auch-sS
(--silent, --show-error) verwenden, um die Fortschrittsanzeige zu unterdrücken (weil wir in eine Pipe schreiben).Ich denke, dies kann auch nützlich sein, wenn Sie Header (zur schnellen Überprüfung) auf die Konsole drucken möchten, aber den Textkörper in eine Datei umleiten möchten (z. B. wenn es sich um eine Art Binärdatei handelt, um Ihr Terminal nicht durcheinander zu bringen):
Beachten Sie: Dies ist NICHT das gleiche wie
curl -I <url>
! As-I
führt eineHEAD
Anforderung und keineGET
Anforderung aus (Suchen Sie nach--head
in man curl . Ja: Bei den meisten HTTP-Servern führt dies zum gleichen Ergebnis. Ich kenne jedoch viele Geschäftsanwendungen, die überhaupt keineHEAD
Anforderung implementierenquelle
quelle