Saya selalu berasumsi bahwa ketika curl mendapat respons HTTP 500 itu mengembalikan kode keluar yang berarti kegagalan (! = 0), tetapi itu tampaknya tidak terjadi.
Apakah ada cara saya dapat membuat cURL gagal dengan exitCode berbeda dari 0 jika kode status HTTP tidak 200? Saya tahu saya bisa menggunakan -w "%{http_code}"
tetapi yang meletakkannya di STDOUT, bukan sebagai kode keluar (selain itu, saya juga tertarik untuk menangkap output, yang saya tidak ingin mengarahkan ulang ke file, tetapi ke layar).
curl -f -L
dan lihat pertanyaan ini untuk perincian tentang apa yang-L
dilakukan.Jika Anda hanya ingin menampilkan konten halaman yang digulung, Anda dapat melakukan ini:
Ini menulis konten halaman ke STDERR sambil menulis kode status HTTP ke STDOUT, sehingga dapat ditugaskan ke variabel STATUSCODE .
sumber
0
kode non status dari skrip?if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
?{ code=$(curl ... as above ...); } 2>&1
Triknya adalah{ ... } 2>&1
memungkinkan pengalihan, sementara tidak menghasilkan shell yang berbeda seperti yang( ... )
seharusnya.Saya dapat melakukannya menggunakan kombinasi flag:
curl --silent --show-error --fail URL
--silent menyembunyikan progres dan kesalahan
--show-error menunjukkan pesan kesalahan disembunyikan oleh
--silent
--fail mengembalikan kode keluar> 0 ketika permintaan gagal
sumber
--silent --show-error --fail
karya sama dengan adil-f/--fail
.--fail
mengembalikan kode keluar22
, seperti yang didokumentasikan .Ya ada cara untuk melakukannya tetapi jauh dari jelas karena melibatkan 3 opsi ikal:
Ini memastikan bahwa keberhasilan (0) hanya terjadi ketika curl end-us dengan
2xx
kode pengembalian akhir dan yangstdout
mendapatkan tubuh dan bahwa setiap kesalahan akan ditampilkan ke stderr.Harap dicatat bahwa dokumentasi curl mungkin sedikit membingungkan Anda karena menyebutkan bahwa --fail bisa berhasil untuk 401 kode. Berdasarkan tes yang tidak benar, setidaknya tidak ketika digunakan dengan --show-error pada saat yang sama.
Sejauh ini saya tidak dapat menemukan kasus di mana curl akan mengembalikan kesuksesan ketika bukan http-succes dengan opsi ini.
sumber