Come verificare se un comando come l'arricciatura è stato completato senza errori?


24

Sto usando curl per caricare un file su un server tramite un post HTTP.

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

Quando eseguo manualmente questo comando dalla riga di comando, ottengo una risposta dal server simile "Upload successful". Tuttavia, se voglio eseguire questo comando di arricciatura tramite uno script, come posso sapere se la mia richiesta POST ha avuto esito positivo?

Risposte:


21

Il modo più semplice è archiviare la risposta e confrontarla:

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

Non l'ho provato. La sintassi potrebbe essere disattivata, ma questa è l'idea. Sono sicuro che ci sono modi più sofisticati per farlo come controllare il codice di uscita di curl o qualcosa del genere.

aggiornare

curlrestituisce alcuni codici di uscita. Immagino che potrebbe derivare un post non riuscito 55 Failed sending network data.Quindi potresti probabilmente assicurarti che il codice di uscita fosse zero confrontando con $?( 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;

O se il tuo comando è relativamente breve e vuoi fare qualcosa quando fallisce, puoi fare affidamento sul codice di uscita come condizione in un'istruzione condizionale:

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

Penso che questo formato sia spesso preferito , ma personalmente lo trovo meno leggibile.


20

Potresti essere in grado di utilizzare l' curl's --failopzione, anche se dovresti prima provarlo.

man curl

-f, --fail (HTTP) non riesce in modo silenzioso (nessun output) su errori del server. Questo viene fatto principalmente per abilitare meglio gli script ecc per gestire meglio i tentativi falliti. In casi normali quando un server HTTP non riesce a consegnare un documento, restituisce un documento HTML che lo afferma (che spesso descrive anche perché e altro). Questo flag impedisce all'arricciatura di emetterlo e restituisce l'errore 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).

In questo modo potresti semplicemente fare:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.