Как проверить, выполнена ли такая команда, как curl, без ошибок?

24

Я использую curl для загрузки файла на сервер через сообщение HTTP.

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

Когда я вручную выполняю эту команду в командной строке, я получаю ответ от сервера, как "Upload successful". Однако как, если я хочу выполнить эту команду curl через скрипт, как я могу узнать, был ли мой запрос POST успешным?

Wes
источник

Ответы:

21

Самый простой способ - сохранить ответ и сравнить его:

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

Я не проверял это. Синтаксис может быть отключен, но это идея. Я уверен, что есть более сложные способы сделать это, например, проверить код завершения curl или что-то еще.

Обновить

curlвозвращает довольно много кодов выхода. Я предполагаю, что ошибочный пост может привести к тому, что 55 Failed sending network data.вы можете просто убедиться, что код завершения равен нулю, сравнивая с $?( 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;

Или, если ваша команда относительно короткая и вы хотите что-то сделать в случае сбоя, вы можете положиться на код завершения в качестве условия в условном выражении:

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

Я думаю, что этот формат часто предпочитают , но лично я считаю его менее читабельным.

Хорхе Букаран
источник
20

Возможно, вы сможете использовать curl's --failопцию, хотя сначала вам нужно ее протестировать.

man curl

-f, --fail (HTTP) Fail молча (без вывода вообще) при ошибках сервера. В основном это делается для того, чтобы лучше включать скрипты и т. Д., Чтобы лучше справляться с неудачными попытками. В обычных случаях, когда HTTP-серверу не удается доставить документ, он возвращает HTML-документ с указанием так (что часто также описывает причину и многое другое). Этот флаг предотвратит появление скручивания и вернет ошибку 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).

Таким образом, вы можете просто сделать:

args="-X POST -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
mikeserv
источник