Comment vérifier si une commande telle que curl s'est terminée sans erreur?


24

J'utilise curl pour télécharger un fichier sur un serveur via une publication HTTP.

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

Lorsque j'exécute manuellement cette commande sur la ligne de commande, j'obtiens une réponse du serveur comme "Upload successful". Cependant, comment si je veux exécuter cette commande curl via un script, comment puis-je savoir si ma demande POST a réussi?

Réponses:


21

Le moyen le plus simple est de stocker la réponse et de la comparer:

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

Je n'ai pas testé ça. La syntaxe est peut-être éteinte, mais c'est l'idée. Je suis sûr qu'il existe des moyens plus sophistiqués de le faire, tels que la vérification du code de sortie de curl ou quelque chose.

mise à jour

curlrenvoie pas mal de codes de sortie. Je suppose qu'un message ayant échoué pourrait entraîner une erreur.Vous pourriez 55 Failed sending network data.donc probablement vous assurer que le code de sortie était zéro en comparant à $?( Expands to the exit status of the most recently executed foreground pipeline.):

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

Ou si votre commande est relativement courte et que vous voulez faire quelque chose en cas d'échec, vous pouvez vous fier au code de sortie comme condition dans une instruction conditionnelle:

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

Je pense que ce format est souvent préféré , mais personnellement je le trouve moins lisible.


20

Vous pourrez peut-être utiliser l' curl's --failoption, mais vous devez d'abord la tester.

man curl

-f, --fail (HTTP) Échec en silence (pas de sortie du tout) sur les erreurs du serveur. Cela est principalement fait pour mieux activer les scripts, etc. pour mieux gérer les tentatives infructueuses. Dans les cas normaux, lorsqu'un serveur HTTP ne parvient pas à livrer un document, il renvoie un document HTML indiquant cela (qui décrit souvent aussi pourquoi et plus). Ce drapeau empêchera la boucle de sortir cela et retournera l'erreur 22.

          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).

De cette façon, vous pourriez simplement faire:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.