Jak sprawdzić, czy polecenie takie jak curl zostało wykonane bezbłędnie?


24

Używam curl, aby przesłać plik na serwer za pośrednictwem postu HTTP.

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

Kiedy ręcznie wykonuję to polecenie w wierszu polecenia, otrzymuję odpowiedź z serwera jak "Upload successful". Jak jednak, jeśli chcę wykonać to polecenie curl za pomocą skryptu, jak mogę sprawdzić, czy moje żądanie POST zakończyło się powodzeniem?

Odpowiedzi:


21

Najprostszym sposobem jest zapisanie odpowiedzi i porównanie:

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

Nie testowałem tego. Składnia może być wyłączona, ale taki jest pomysł. Jestem pewien, że istnieją bardziej wyrafinowane sposoby, takie jak sprawdzenie kodu wyjścia curl lub coś takiego.

aktualizacja

curlzwraca sporo kodów wyjścia. Domyślam się, że nieudany post może spowodować, 55 Failed sending network data.więc prawdopodobnie możesz po prostu upewnić się, że kod wyjścia był równy zero, porównując do $?( 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;

Lub jeśli twoje polecenie jest stosunkowo krótkie i chcesz coś zrobić, gdy się nie powiedzie, możesz polegać na kodzie wyjścia jako warunku w instrukcji warunkowej:

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

Myślę, że ten format jest często preferowany , ale osobiście uważam go za mniej czytelny.


20

Możliwe curl's --fail, że możesz skorzystać z opcji, choć powinieneś ją najpierw przetestować.

man curl

-f, --fail (HTTP) Błąd cicho (brak danych wyjściowych) w przypadku błędów serwera. Odbywa się to głównie w celu lepszego włączenia skryptów itp. W celu lepszego radzenia sobie z nieudanymi próbami. W normalnych przypadkach, gdy serwer HTTP nie dostarcza dokumentu, zwraca dokument HTML z takim stwierdzeniem (co często opisuje również dlaczego i więcej). Ta flaga zapobiegnie wysyłaniu tego przez curl i zwróci błąd 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).

W ten sposób możesz po prostu:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.