cURL menekan tubuh respons

110

Apakah mungkin menginstruksikan cURL untuk menekan output tubuh respons?

Dalam kasus saya, isi respons adalah halaman HTML, yang meluap dari buffer CLI, sehingga sulit untuk menemukan informasi yang relevan. Saya ingin memeriksa bagian lain dari output seperti kode respons HTTP, header, dll - semuanya kecuali HTML yang sebenarnya.

BaltoStar
sumber

Jawaban:

117

Anda dapat menggunakan -oswitch dan nullpseudo-file:

Unix

curl -s -o /dev/null -v http://google.com

Windows

curl -s -o nul -v http://google.com
Gilles Quenot
sumber
1
... jika Anda menggunakan Unix ;-) Untuk Windows, Anda mungkin ingin menggunakan nul. Ini tautan ke dokumennya, mungkin BaltoStar merasakan dorongan untuk membaca sebelum bertanya lain kali ;-) curl.haxx.se/docs/manpage.html
Marged
3
Sama sama. Tapi itu adalah "nul", "null" akan membuat file dengan nama itu
Marged
1
sebenarnya saya membaca halaman manual sebelum memposting dan mencoba -s -o nultetapi pada curl -s -o nul -v http://{internal-host}/{internal-uri}seluruh html halaman output mesin windows saya - saya mencoba curl -s -o nul -v http://google.comdan itu menekan output seperti yang diharapkan, jadi saya tidak mengerti mengapa ini tidak berfungsi untuk situs internal saya
BaltoStar
-ohanya menentukan satu keluaran URL: jika Anda memiliki banyak url, itu hanya akan membuang yang pertama :(
Simon Buchan
1
Mengandalkan non-portabel NULdan /dev/null. Menggunakan -sIXGETadalah IMO opsi yang lebih baik.
binki
45

Berikut cara untuk menyembunyikan semua output dan header curl, dengan opsi untuk tetap menampilkan error jika terjadi. Berguna untuk pekerjaan cron atau pengujian otomatis.

Unix

Untuk menekan semua keluaran:

curl --silent --output /dev/null http://example.com

Untuk menyembunyikan keluaran tetapi masih menunjukkan kesalahan jika terjadi:

curl --silent --output /dev/null --show-error --fail http://example.com

Windows

Untuk menekan semua keluaran:

curl --silent --output nul http://example.com

Untuk menyembunyikan keluaran tetapi masih menunjukkan kesalahan jika terjadi:

curl --silent --output nul --show-error --fail http://example.com

Parameter Dijelaskan

--silentmenyembunyikan statistik unduhan-dalam-proses (tetapi masih akan menampilkan output HTML)
--output /dev/nullmenyembunyikan output yang berhasil
--show-errormenunjukkan kesalahan, bahkan ketika silentmode diaktifkan
--failakan menimbulkan kesalahan jika respons HTTP adalah kode kesalahan (404, 500 dll.), bukan hanya DNS / Kesalahan TCP.


PEMBARUAN: Saya menyadari penulis asli ingin memeriksa tajuk dan kode respons permintaan daripada membungkam semuanya . Lihat jawaban samael untuk detil bagaimana melakukan itu.

Simon Timur
sumber
2
Mengandalkan non-portabel NULdan /dev/null. Menggunakan -sIXGETadalah IMO opsi yang lebih baik.
binki
1
Terima kasih atas komentar @binki - mereka sebenarnya melakukan hal yang berbeda. Juga menyadari OP ingin memeriksa header yang tidak ditampilkan dalam solusi saya. Saya telah memperbarui jawaban saya untuk mencerminkan itu.
Simon East
1
Saya kira dalam membaca ulang postingan OP mereka tidak mengatakan bahwa mereka hanya ingin melihat header. Mereka mungkin sebenarnya sedang mencari curl -vo/dev/null/ curl -voNUL… dan saya tidak tahu apakah ada varian portabel dari itu, hrm… ;-).
binki
Apakah ada perintah singkat untuk --fail? Saya pikir -sS adalah yang kita butuhkan untuk --silent dan --show-error
Freedo
Ya, ada: curl -Ssfo /dev/null url. Tapi bersikaplah baik kepada pengelola masa depan.
Amit Naidu
29

Jika Anda ingin menampilkan header tetapi menyembunyikan isi respons, Anda dapat menggunakan:

curl -sIXGET http://somedomain.com/your/url

Saya telah menggunakan curl -I http://somedomain.com/your/urlhanya untuk menampilkan header respon. Masalah dengan itu adalah bahwa itu membuat permintaan menggunakan HEADmetode yang tidak baik ketika Anda ingin menguji panggilan API yang hanya menanggapi GETpermintaan. Untuk apa -X GET, ini mengubah permintaan menjadiGET .

Jadi, ringkasannya:

-smenyembunyikan bilah kemajuan dari keluaran (terutama berguna saat menyalurkan ke program lain)
-Imenunjukkan tajuk (tetapi membuat HEADpermintaan)
-XGETmengubah permintaan kembali menjadi GETpermintaan

lihat: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

samael
sumber
2
Itu sangat rumit; curl -imelakukan hal yang persis sama.
bfontaine
4
tidak, -itermasuk HTTP-header dalam keluaran serta isi. Cobalah. curl -i http://google.comtidak sama dengancurl -IXGET http://google.com
samael
Untuk tujuan saya (dan OP) curl -I urlsudah cukup dan memiliki efek yang sama. Saya hanya perlu memeriksa apakah url responsif. Pertanyaan ini juga hanya tentang menekan tubuh, yang berhasil dengan HEADbaik.
Amit Naidu