cURL Antwortkörper unterdrücken

108

Ist es möglich, cURL anzuweisen, die Ausgabe des Antwortkörpers zu unterdrücken?

In meinem Fall ist der Antworttext eine HTML-Seite, die den CLI-Puffer überläuft und es schwierig macht, die relevanten Informationen zu finden. Ich möchte die anderen Teile der Ausgabe wie HTTP-Antwortcode, Header usw. untersuchen - alles außer dem eigentlichen HTML.

BaltoStar
quelle

Antworten:

115

Sie können den -oSchalter und die nullPseudodatei verwenden:

Unix

curl -s -o /dev/null -v http://google.com

Windows

curl -s -o nul -v http://google.com
Gilles Quenot
quelle
1
... wenn Sie unter Unix sind ;-) Für Windows möchten Sie vielleicht nul verwenden. Hier ist der Link zu den Dokumenten, vielleicht hat BaltoStar den Drang zu lesen, bevor er das nächste Mal fragt
;-)
3
Bitte schön. Aber es ist "nul", "null" erstellt eine Datei mit diesem Namen
Marged
1
Tatsächlich habe ich die Manpage vor dem Posten gelesen und versucht, -s -o nulaber auf meinem Windows-Computer wird curl -s -o nul -v http://{internal-host}/{internal-uri}das gesamte HTML der Seite curl -s -o nul -v http://google.comausgegeben - ich habe es versucht und es unterdrückt die Ausgabe wie erwartet, daher verstehe ich nicht, warum dies für meine interne Site nicht funktioniert
BaltoStar
-oGibt nur eine URL-Ausgabe an: Wenn Sie mehrere URLs haben, wird nur die erste verworfen :(
Simon Buchan
1
Verlässt sich auf nicht tragbare NULund /dev/null. Verwenden -sIXGETist eine bessere Option IMO.
Binki
44

Hier ist eine Möglichkeit, alle Curl-Ausgaben und Header zu unterdrücken, mit der Option, weiterhin Fehler anzuzeigen, wenn sie auftreten. Nützlich für Cron-Jobs oder automatisierte Tests.

Unix

So unterdrücken Sie alle Ausgaben:

curl --silent --output /dev/null http://example.com

So unterdrücken Sie die Ausgabe, zeigen aber dennoch Fehler an, wenn sie auftreten:

curl --silent --output /dev/null --show-error --fail http://example.com

Windows

So unterdrücken Sie alle Ausgaben:

curl --silent --output nul http://example.com

So unterdrücken Sie die Ausgabe, zeigen aber dennoch Fehler an, wenn sie auftreten:

curl --silent --output nul --show-error --fail http://example.com

Erklärte Parameter

--silentUnterdrückt die laufenden Download-Statistiken (zeigt jedoch weiterhin die HTML-Ausgabe an).
--output /dev/nullVersteckt die erfolgreiche Ausgabe und
--show-errorzeigt Fehler an. Selbst wenn der silentModus aktiviert ist,
--failwird ein Fehler ausgegeben , wenn die HTTP-Antwort ein Fehlercode (404, 500 usw.) anstelle von lediglich DNS / ist. TCP-Fehler.


UPDATE: Mir ist klar, dass der ursprüngliche Autor die Header und den Antwortcode einer Anfrage überprüfen wollte, anstatt alles zum Schweigen zu bringen . Siehe samael Antwort für Details, wie das zu tun.

Simon East
quelle
2
Verlässt sich auf nicht tragbare NULund /dev/null. Verwenden -sIXGETist eine bessere Option IMO.
Binki
1
Danke für den Kommentar @binki - sie machen tatsächlich verschiedene Dinge. Außerdem wurde mir klar, dass das OP die Header überprüfen wollte, die in meiner Lösung nicht angezeigt werden. Ich habe meine Antwort aktualisiert, um dies widerzuspiegeln.
Simon East
1
Ich denke, als sie den Beitrag des OP noch einmal gelesen haben, haben sie nicht gesagt, dass sie nur Header sehen wollen. Sie haben vielleicht tatsächlich nach curl -vo/dev/null/ curl -voNUL… gesucht und ich weiß nicht, ob es eine tragbare Variante davon gibt, hrm… ;-).
Binki
Gibt es einen kurzen Befehl für --fail? Ich denke -sS ist das, was wir für --silent und --show-error
Freedo
27

Wenn Sie Header anzeigen, aber den Antworttext ausblenden möchten, sollten Sie Folgendes verwenden:

curl -sIXGET http://somedomain.com/your/url

Ich hatte curl -I http://somedomain.com/your/urlnur Antwort-Header angezeigt. Das Problem dabei ist jedoch, dass die Anfrage mit der HEADMethode gestellt wird, die nicht gut ist, wenn Sie einen API-Aufruf testen möchten, der nur auf eine GETAnfrage antwortet . Dafür ist das gedacht -X GET, es ändert die Anfrage in a GET.

Also zusammenfassend:

-sBlendet die Fortschrittsbalken vor der Ausgabe aus (besonders nützlich beim Weiterleiten an ein anderes Programm).
-IZeigt Header an (stellt jedoch eine HEADAnforderung) und
-XGETkonvertiert die Anforderung zurück in eine GETAnforderung

siehe: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

Samael
quelle
2
Das ist wirklich kompliziert; curl -imacht genau das gleiche.
Bfontaine
4
nein, -ienthält den HTTP-Header in der Ausgabe sowie den Body. Versuch es. curl -i http://google.comist nicht dasselbe wiecurl -IXGET http://google.com
samael