Wie überprüfe ich, ob ein Befehl wie curl fehlerfrei ausgeführt wurde?


24

Ich verwende curl, um eine Datei über einen HTTP-Beitrag auf einen Server hochzuladen.

curl -X POST -d@myfile.txt server-URL

Wenn ich diesen Befehl manuell in der Befehlszeile ausführe, erhalte ich eine Antwort vom Server wie "Upload successful". Wie kann ich jedoch herausfinden, ob meine POST-Anfrage erfolgreich war, wenn ich diesen Befehl über ein Skript ausführen möchte?

Antworten:


21

Am einfachsten ist es, die Antwort zu speichern und zu vergleichen:

$ response=$(curl -X POST -d@myfile.txt server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;

Das habe ich nicht getestet. Die Syntax ist möglicherweise nicht korrekt, aber das ist die Idee. Ich bin mir sicher, dass es ausgefeiltere Methoden gibt, wie das Überprüfen des Exit-Codes von curl oder so.

aktualisieren

curlgibt einige Exit-Codes zurück. Ich vermute, ein fehlgeschlagener Beitrag könnte dazu führen 55 Failed sending network data., dass der Exit-Code mit $?( Expands to the exit status of the most recently executed foreground pipeline.) auf Null gesetzt wird :

$ curl -X POST -d@myfile.txt server-URL;
$ if [ 0 -eq $? ]; then … fi;

Oder wenn Ihr Befehl relativ kurz ist und Sie etwas tun möchten, wenn er fehlschlägt, können Sie sich auf den Exit-Code als Bedingung in einer bedingten Anweisung verlassen:

$ if curl --fail -X POST -d@myfile.txt server-URL; then
    # …(success)
else
    # …(failure)
fi;

Ich denke, dieses Format wird oft bevorzugt , aber ich persönlich finde es weniger lesbar.


20

Möglicherweise können Sie die curl's --failOption verwenden, Sie sollten sie jedoch zuerst einmal testen.

man curl

-f, --fail (HTTP) Schlägt bei Serverfehlern im Hintergrund fehl (überhaupt keine Ausgabe). Dies geschieht hauptsächlich, um Skripte usw. besser zu aktivieren und fehlgeschlagene Versuche besser zu bewältigen. In normalen Fällen gibt ein HTTP-Server, der ein Dokument nicht zustellt, ein HTML-Dokument zurück, in dem dies angegeben ist (in dem häufig auch das Warum und weitere Gründe beschrieben werden). Dieses Flag verhindert, dass ein Curl diesen ausgibt, und gibt Fehler 22 zurück.

          This method is not fail-safe and there are occasions where  non-
          successful  response  codes  will  slip through, especially when
          authentication is involved (response codes 401 and 407).

Auf diese Weise können Sie einfach Folgendes tun:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.