Як перевірити, чи виконана така команда, як curl, без помилки?


24

Я використовую curl для завантаження файлу на сервер через повідомлення HTTP.

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

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

Відповіді:


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) Збій мовчки (взагалі немає виводу) на помилках сервера. Здебільшого це робиться для того, щоб краще включити сценарії тощо, щоб краще вирішити невдалі спроби. У звичайних випадках, коли сервер 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!"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.