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 -d@myfile.txt 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?

Jawaban:


21

Cara paling sederhana adalah menyimpan respons dan membandingkannya:

$ response=$(curl -X POST -d@myfile.txt 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 -d@myfile.txt 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 -d@myfile.txt server-URL; then
    # …(success)
else
    # …(failure)
fi;

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


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 -d@myfile.txt server-URL"
curl -f $args && echo "SUCCESS!" ||
    echo "OH NO!"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.