Bagaimana cara mengecek apakah perintah seperti curl selesai tanpa kesalahan?

24

Saya menggunakan curl untuk mengunggah file ke server melalui pos HTTP.

curl -X POST [email protected] server-URL

Ketika saya secara manual menjalankan perintah ini pada baris perintah, saya mendapat respons dari server seperti "Upload successful". Namun, bagaimana jika saya ingin menjalankan perintah curl ini melalui skrip, bagaimana saya bisa mengetahui apakah permintaan POST saya berhasil?

Wes
sumber

Jawaban:

21

Cara paling sederhana adalah menyimpan respons dan membandingkannya:

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

Saya belum mengujinya. Sintaksnya mungkin tidak aktif, tetapi itulah idenya. Saya yakin ada cara yang lebih canggih untuk melakukannya seperti memeriksa kode keluar curl atau sesuatu.

memperbarui

curlmengembalikan beberapa kode keluar. Saya menduga posting yang gagal dapat mengakibatkan 55 Failed sending network data.Jadi Anda mungkin bisa memastikan kode keluar nol dengan membandingkan ke $?( Expands to the exit status of the most recently executed foreground pipeline.):

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

Atau jika perintah Anda relatif pendek dan Anda ingin melakukan sesuatu ketika gagal, Anda bisa mengandalkan kode keluar sebagai kondisi dalam pernyataan bersyarat:

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

Saya pikir format ini sering disukai , tetapi secara pribadi saya merasa ini kurang mudah dibaca.

Jorge Bucaran
sumber
20

Anda mungkin dapat menggunakan curl's --failopsi, meskipun Anda harus mengujinya dulu.

man curl

-f, --fail (HTTP) Gagal diam-diam (tidak ada output sama sekali) pada kesalahan server. Hal ini sebagian besar dilakukan untuk mengaktifkan skrip dll untuk lebih baik dalam menghadapi upaya yang gagal. Dalam kasus normal ketika server HTTP gagal mengirimkan dokumen, ia mengembalikan dokumen HTML yang menyatakan demikian (yang sering juga menjelaskan alasan dan lebih banyak lagi). Bendera ini akan mencegah curl agar tidak menghasilkannya dan mengembalikan kesalahan 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).

Dengan cara ini Anda bisa melakukan:

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