Saya menggunakan curl untuk mendapatkan header http untuk menemukan kode status http dan juga mengembalikan respons. Saya mendapatkan header http dengan perintah
curl -I http://localhost
Untuk mendapat respon, saya menggunakan perintah
curl http://localhost
Segera setelah menggunakan flag -I, saya hanya mendapatkan header dan responsnya tidak lagi ada. Apakah ada cara untuk mendapatkan respons http dan kode status header / http dalam satu perintah?
Jawaban:
Saya bisa mendapatkan solusi dengan melihat dokumen curl yang menentukan untuk digunakan
-
untuk keluaran untuk mendapatkan keluaran ke stdout.Untuk mendapatkan respon hanya dengan kode http return, saya bisa melakukannya
sumber
-i
. Atau mungkin-v
jika Anda juga menyukai beberapa info tambahan.-o -I
akhirnya membuat file bernama secara harfiah '-I
' di CWD. Apakah ada orang lain yang melihat ini? Solusi untuk itu adalah-o/dev/null -I
mode verbose akan memberi tahu Anda segalanya
sumber
Saya menggunakan perintah ini untuk mencetak kode status tanpa keluaran lainnya. Selain itu, ini hanya akan melakukan permintaan HEAD dan mengikuti pengalihan (masing
-I
- masing dan-L
).Ini membuatnya sangat mudah untuk memeriksa kode status dalam skrip kesehatan:
sumber
curl -o -I -L -s -w "%{http_code}" http://localhost
sebuah file dibuat bernama-I
, untuk menyiasati ini saya menambahkan tempat untuk output file yang tersirat oleh-o
pergi, yaitu/dev/null
:curl -o /dev/null -I -L -s -w "%{http_code}" http://localhost
Saya menemukan pertanyaan ini karena saya ingin KEDUA tanggapan dan konten untuk menambahkan beberapa penanganan kesalahan bagi pengguna.
Anda dapat mencetak kode status HTTP ke std out dan menulis isinya ke file lain.
Ini memungkinkan Anda menggunakan logika untuk memutuskan apakah responsnya layak untuk diproses.
sumber
The
-i
pilihan adalah salah satu yang Anda inginkan:Sebagai alternatif, Anda dapat menggunakan opsi verbose:
sumber
Saya telah menggunakan ini:
Untuk mendapatkan status HTTP
Untuk mendapatkan respon tubuh saya telah menggunakan ini
sumber
Perintah ini
akan mendapatkan badan dan status yang dipisahkan koma; Anda dapat membaginya untuk dikeluarkan.
Anda dapat mengubah pembatas sesuka Anda.
sumber
Untuk penggunaan terprogram, saya menggunakan yang berikut ini:
Ini menunjukkan output berikut:
sumber
Ini adalah cara untuk mengambil tubuh "DAN" kode status dan memformatnya ke json yang tepat atau format apa pun yang sesuai untuk Anda. Beberapa orang mungkin berpendapat itu adalah penggunaan yang salah dari opsi format tulis tetapi ini berfungsi untuk saya ketika saya membutuhkan kode tubuh dan status di skrip saya untuk memeriksa kode status dan menyampaikan kembali tanggapan dari server.
jalankan kode di atas dan Anda harus mendapatkan kembali json dalam format ini:
dengan opsi format tulis -w, karena stderr dicetak terlebih dahulu, Anda dapat memformat keluaran Anda dengan var http_code dan menempatkan isi respons dalam sebuah nilai (body) dan menindaklanjuti lampiran menggunakan var stdout. Kemudian alihkan output stderr Anda ke stdout dan Anda akan dapat menggabungkan http_code dan response body menjadi output yang rapi
sumber
curl: unknown --write-out variable: 'stderr'
dancurl: unknown --write-out variable: 'stdout'
Cara saya untuk mencapai ini :
Untuk mendapatkan keduanya (header dan body), saya biasanya melakukan
curl -D- <url>
seperti di:Ini akan membuang header (
-D
) ke stdout (-
) (Cari--dump-header
di man curl ).IMHO juga sangat berguna dalam konteks ini:
Saya sering menggunakan jq untuk mendapatkan data json (misalnya dari beberapa API lainnya) diformat. Tetapi karena jq tidak mengharapkan header HTTP, triknya adalah mencetak header ke stderr menggunakan
-D/dev/stderr
. Perhatikan bahwa kali ini kami juga menggunakan-sS
(--silent, --show-error) untuk menekan pengukur kemajuan (karena kami menulis ke pipa).Saya kira ini juga dapat berguna jika Anda ingin mencetak header (untuk pemeriksaan cepat) ke konsol tetapi mengarahkan isi ke file (misalnya ketika semacam biner untuk tidak mengacaukan terminal Anda):
Waspada: Ini TIDAK sama dengan
curl -I <url>
! As-I
akan melakukanHEAD
permintaan dan bukanGET
permintaan (Cari--head
di man curl . Ya: Untuk sebagian besar server HTTP, ini akan menghasilkan hasil yang sama. Tapi saya tahu banyak aplikasi bisnis yang tidak mengimplementasikanHEAD
permintaan sama sekali ;-Psumber
sumber