¿Cómo verificar si un comando como curl se completó sin error?

24

Estoy usando curl para cargar un archivo a un servidor a través de una publicación HTTP.

curl -X POST [email protected] server-URL

Cuando ejecuto manualmente este comando en la línea de comando, obtengo una respuesta del servidor como "Upload successful". Sin embargo, ¿cómo si quiero ejecutar este comando curl a través de un script, cómo puedo saber si mi solicitud POST fue exitosa?

Wes
fuente

Respuestas:

21

La forma más simple es almacenar la respuesta y compararla:

$ response=$(curl -X POST [email protected] server-URL);
$ if [ "Upload successful" == "${response}" ]; then … fi;

No he probado eso. La sintaxis puede estar desactivada, pero esa es la idea. Estoy seguro de que hay formas más sofisticadas de hacerlo, como verificar el código de salida de curl o algo así.

actualizar

curldevuelve bastantes códigos de salida. Supongo que una publicación fallida podría resultar en 55 Failed sending network data.Así que probablemente podría asegurarse de que el código de salida fuera cero comparando con $?( Expands to the exit status of the most recently executed foreground pipeline.):

$ curl -X POST [email protected] server-URL;
$ if [ 0 -eq $? ]; then … fi;

O si su comando es relativamente corto y desea hacer algo cuando falla, puede confiar en el código de salida como condición en una declaración condicional:

$ if curl --fail -X POST [email protected] server-URL; then
    # …(success)
else
    # …(failure)
fi;

Creo que a menudo se prefiere este formato , pero personalmente me parece menos legible.

Jorge Bucaran
fuente
20

Es posible que pueda usar la curl's --failopción, aunque primero debe probarla.

man curl

-f, --fail (HTTP) Falla silenciosa (sin salida en absoluto) en los errores del servidor. Esto se hace principalmente para habilitar mejor los scripts, etc., para tratar mejor los intentos fallidos. En casos normales, cuando un servidor HTTP no puede entregar un documento, devuelve un documento HTML que lo indica (que a menudo también describe por qué y más). Esta bandera evitará que el rizo salga y devolverá el error 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 esta manera podrías simplemente hacer:

args="-X POST [email protected] server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
mikeserv
fuente