Ich bin immer davon ausgegangen, dass curl bei einer HTTP 500-Antwort einen Exit-Code zurückgibt, der einen Fehler bedeutet (! = 0), aber das scheint nicht der Fall zu sein.
Gibt es eine Möglichkeit, cURL mit einem anderen exitCode als 0 zum Scheitern zu bringen, wenn der HTTP-Statuscode nicht 200 ist? Ich weiß, dass ich es verwenden kann, -w "%{http_code}"
aber das bringt es in STDOUT, nicht als Exit-Code (außerdem bin ich auch daran interessiert, die Ausgabe zu erfassen, die ich nicht in eine Datei, sondern auf den Bildschirm umleiten möchte).
curl -f -L
und sehen diese Frage für Details auf , was der-L
Fall ist.Wenn Sie nur den Inhalt der gewellten Seite anzeigen möchten, können Sie dies tun:
Dadurch wird der Inhalt der Seite in STDERR geschrieben, während der HTTP-Statuscode in STDOUT geschrieben wird, sodass er der Variablen STATUSCODE zugewiesen werden kann .
quelle
0
Statuscode aus dem Skript zurückgeben möchte ?if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
?{ code=$(curl ... as above ...); } 2>&1
Der Trick ist{ ... } 2>&1
, dass das Umleiten möglich ist, ohne eine andere Shell zu( ... )
erzeugen.Ich konnte es mit einer Kombination von Flags machen:
curl --silent --show-error --fail URL
--silent verbirgt den Fortschritt und den Fehler.
--show-error zeigt die von
--silent
--fail ausgeblendete Fehlermeldung an , die einen Exit-Code> 0 zurückgibt, wenn die Anfrage fehlschlägt
quelle
--silent --show-error --fail
funktioniert das genauso wie eben-f/--fail
.--fail
gibt Exit - Code22
, wie dokumentiert .Ja, es gibt eine Möglichkeit, dies zu tun, aber dies ist alles andere als offensichtlich, da es sich um drei Optionen handelt:
Dies stellt sicher, dass Erfolg (0) nur dann eintritt, wenn curl uns den endgültigen
2xx
Rückkehrcode gibt undstdout
der Body abgerufen wird und alle Fehler stderr angezeigt werden.Bitte beachten Sie, dass die Curl-Dokumentation Sie ein wenig verwirren kann, da erwähnt wird, dass --fail bei einigen 401-Codes erfolgreich sein kann. Basierend auf Tests ist das nicht wahr, zumindest nicht bei gleichzeitiger Verwendung mit --show-error.
Bisher konnte ich keinen Fall finden, in dem Curl erfolgreich war, wenn es mit diesen Optionen nicht erfolgreich war.
quelle