Cara menampilkan header permintaan dengan ikal baris perintah
568
Ikal baris perintah dapat menampilkan tajuk respons dengan menggunakan -Dopsi, tetapi saya ingin melihat tajuk permintaan apa yang dikirimkannya. Bagaimana saya bisa melakukan itu?
curl --head http://google.comakan melakukan hal yang sama seperti -Ibendera :)
Abel Terefe
9
Catatan tentang penggunaan --head/ -I: tidak semua server merespons HEADpermintaan yang sama persis (misalnya, Content-Encodingakan hilang jika Anda mencoba memverifikasi bahwa badan akan di-gzip) dan tidak semua server mendukung HEAD. -vbiasanya merupakan pilihan yang lebih aman.
Baca pertanyaannya - ini untuk header respons, bukan header permintaan
Graeme Stuart
58
Jawaban ini berguna bagi saya karena saya juga salah membaca pertanyaan.
Liam
2
Perintah ini agak berbeda untuk Windows: curl -sD - -o NULL http://example.com
Sergey Vlasov
2
@SergeyVlasov Sebenarnya, setara dengan /dev/nulldi Windows nul, tidak null.
Francisco Zarabozo
2
Meskipun pertanyaan ini menanyakan header permintaan, google mengarahkan semua orang di sini yang mencari header respons sehingga kami semua senang jawaban ini ada di sini. Dan jawaban ini adalah yang terbaik untuk mendapatkan header respons. Terima kasih!!!
biomiker
96
Saya percaya saklar baris perintah yang Anda cari untuk diteruskan ke ikal adalah -I .
Selain itu, jika Anda menjumpai kode status HTTP respons 301, Anda mungkin juga ingin meneruskan -Largumen untuk memberi tahu curluntuk mengikuti pengalihan URL, dan, dalam hal ini, cetak header semua halaman (termasuk pengalihan URL), diilustrasikan di bawah ini :
The -Ipilihan menunjukkan respon header. Pertanyaannya adalah tentang header permintaan .
Asaf
53
The -Ipilihan penyebab meringkuk untuk melakukan HTTP HEAD, yang bisa mengubah respon dari server. Lebih baik menggunakan -vsaklar saya percaya.
acw
1
Jika Anda mencoba ini dengan hal lain selain HEADpermintaan (seperti -X POST) dan dapatkan "Anda hanya dapat memilih satu permintaan HTTP!" daripada stackoverflow.com/questions/286982/… mungkin akan membantu Anda. Masalahnya adalah bahwa -Imelakukan HEADpermintaan, seperti yang acwdinyatakan dan ketika curlpanggilan Anda diatur untuk melakukan panggilan lain, Anda memiliki dua permintaan HTTP dalam curlpanggilan ...
flu
7
Ini jawaban yang sangat salah. (Saya berjanji saya biasanya sangat baik di sini.) 1. Ia melakukan kebalikan dari apa yang diminta OP. 2. Menggunakan metode permintaan, HEADbukan GETatau POST. 3. Seharusnya TIDAK PERNAH digunakan untuk "hanya melihat header" kecuali Anda mencoba untuk melihat bagaimana server Anda merespons berbeda HEADsebagai lawan dari a GET. Sebagian besar waktu akan sama, tetapi tidak selalu. Hanya untuk melihat tajuk yang digunakan curl -o /dev/null -D /dev/stdout. Itu akan memberikan hasil yang diharapkan 100% dari waktu.
Bruno Bronosky
79
Opsi verbose berguna, tetapi jika Anda ingin melihat segala sesuatu yang dikeriting (termasuk badan HTTP yang dikirim, dan bukan hanya header), saya sarankan menggunakan salah satu opsi di bawah ini:
Saya tidak berpikir begitu karena itu menunjukkan header & tubuh respons juga!
Pmpr
56
Anda mendapatkan hasil tajuk yang bagus dengan perintah berikut:
curl -L -v -s -o /dev/null google.de
-L, --location ikuti arahan ulang
-v, --verbose lebih banyak output, menunjukkan arah
-s, --silent jangan tampilkan bilah kemajuan
-o, --output /dev/null jangan tampilkan tubuh yang diterima
Atau versi yang lebih pendek:
curl -Lvso /dev/null google.de
Hasil dalam:
*Rebuilt URL to: google.de/*Trying2a00:1450:4008:802::2003...*Connected to google.de (2a00:1450:4008:802::2003) port 80(#0)> GET / HTTP/1.1>Host: google.de
>User-Agent: curl/7.43.0>Accept:*/*>< HTTP/1.1301MovedPermanently<Location: http://www.google.de/<Content-Type: text/html; charset=UTF-8<Date:Fri,12Aug201615:45:36 GMT
<Expires:Sun,11Sep201615:45:36 GMT
<Cache-Control: public, max-age=2592000<Server: gws
<Content-Length:218< X-XSS-Protection:1; mode=block
< X-Frame-Options: SAMEORIGIN
<*Ignoring the response-body
{[218 bytes data]*Connection#0 to host google.de left intact*Issue another request to this URL:'http://www.google.de/'*Trying2a00:1450:4008:800::2003...*Connected to www.google.de (2a00:1450:4008:800::2003) port 80(#1)> GET / HTTP/1.1>Host: www.google.de
>User-Agent: curl/7.43.0>Accept:*/*>< HTTP/1.1200 OK
<Date:Fri,12Aug201615:45:36 GMT
<Expires:-1<Cache-Control: private, max-age=0<Content-Type: text/html; charset=ISO-8859-1< P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."<Server: gws
< X-XSS-Protection:1; mode=block
< X-Frame-Options: SAMEORIGIN
<Set-Cookie: NID=84=Z0WT_INFoDbf_0FIe_uHqzL9mf3DMSQs0mHyTEDAQOGY2sOrQaKVgN2domEw8frXvo4I3x3QVLqCH340HME3t1-6gNu8R-ArecuaneSURXNxSXYMhW2kBIE8Duty-_w7; expires=Sat,11-Feb-201715:45:36 GMT; path=/; domain=.google.de;HttpOnly<Accept-Ranges: none
<Vary:Accept-Encoding<Transfer-Encoding: chunked
<{[11080 bytes data]*Connection#1 to host www.google.de left intact
Seperti yang Anda lihat curloutput baik header keluar dan masuk dan melompati data tubuh meskipun memberitahu Anda seberapa besar tubuh.
Selain itu untuk setiap baris arah ditunjukkan sehingga mudah dibaca. Saya merasa berguna untuk melacak rantai pengalihan yang panjang.
Saya suka ini lebih baik daripada -vopsi dengan suara lebih tinggi. Juga, hanya untuk singkatnya ini juga bisa curl -Lvso /dev/null <target>selama odatang di akhir.
pekik
12
Perintah seperti di bawah ini akan menampilkan tiga bagian: header permintaan, header respons, dan data (dipisahkan oleh CRLF). Ini menghindari informasi teknis dan kebisingan sintaksis yang ditambahkan oleh curl.
Saya harus mengatasi masalah ini sendiri, ketika debugging aplikasi web. -vbagus, tapi agak terlalu bertele-tele untuk seleraku. Ini adalah solusi (khusus bash) yang saya buat:
curl -v http://example.com/ 2> >(sed '/^*/d')
Ini berfungsi karena output dari -vdikirim ke stderr, bukan stdout. Dengan mengarahkan ini ke subkulit, kita dapat sedmenghapus garis yang dimulai dengan *. Karena output nyata tidak melewati subkulit, itu tidak terpengaruh. Menggunakan subkulit agak berat, tapi itu cara termudah untuk mengarahkan stderr ke perintah lain. (Seperti yang saya catat, saya hanya menggunakan ini untuk pengujian, jadi itu berfungsi dengan baik untuk saya.)
opsi -v untuk curl terlalu bertele-tele dalam output kesalahan yang berisi terkemuka *(baris status) atau >(bidang kepala permintaan) atau <(bidang kepala respons). untuk mendapatkan hanya bidang kepala permintaan:
untuk memfilter -voutput, Anda harus mengarahkan output error ke terminal dan output std ke / dev / null, opsi -s adalah untuk melarang metering progres
Jika Anda ingin lebih banyak alternatif, Anda dapat mencoba menginstal klien HTTP baris perintah Modern seperti httpie yang tersedia untuk sebagian besar Sistem Operasi dengan manajer paket seperti minuman, apt-get, pip, yum dll.
misal: - Untuk OSX
brew install httpie
Kemudian Anda dapat menggunakannya pada command line dengan berbagai opsi
curl --head http://google.com
akan melakukan hal yang sama seperti-I
bendera :)--head
/-I
: tidak semua server meresponsHEAD
permintaan yang sama persis (misalnya,Content-Encoding
akan hilang jika Anda mencoba memverifikasi bahwa badan akan di-gzip) dan tidak semua server mendukungHEAD
.-v
biasanya merupakan pilihan yang lebih aman.Jawaban:
ikal
-v
atau--verbose
opsi menunjukkan header permintaan HTTP, antara lain. Berikut adalah beberapa contoh keluaran:sumber
Jawaban populer untuk menampilkan header respons , tetapi OP bertanya tentang header permintaan .
-s
: Hindari menampilkan bilah kemajuan-D -
: Dump header ke file, tetapi-
mengirimkannya ke stdout-o /dev/null
: Abaikan badan responsIni lebih baik daripada
-I
karena tidak mengirimHEAD
permintaan, yang dapat menghasilkan hasil yang berbeda.Ini lebih baik daripada
-v
karena Anda tidak perlu begitu banyak peretasan untuk membatalkannya.sumber
curl -sD - -o NULL http://example.com
/dev/null
di Windowsnul
, tidaknull
.Saya percaya saklar baris perintah yang Anda cari untuk diteruskan ke ikal adalah
-I
.Contoh penggunaan:
Selain itu, jika Anda menjumpai kode status HTTP respons 301, Anda mungkin juga ingin meneruskan
-L
argumen untuk memberi tahucurl
untuk mengikuti pengalihan URL, dan, dalam hal ini, cetak header semua halaman (termasuk pengalihan URL), diilustrasikan di bawah ini :sumber
-I
pilihan menunjukkan respon header. Pertanyaannya adalah tentang header permintaan .-I
pilihan penyebab meringkuk untuk melakukanHTTP HEAD
, yang bisa mengubah respon dari server. Lebih baik menggunakan-v
saklar saya percaya.HEAD
permintaan (seperti-X POST
) dan dapatkan "Anda hanya dapat memilih satu permintaan HTTP!" daripada stackoverflow.com/questions/286982/… mungkin akan membantu Anda. Masalahnya adalah bahwa-I
melakukanHEAD
permintaan, seperti yangacw
dinyatakan dan ketikacurl
panggilan Anda diatur untuk melakukan panggilan lain, Anda memiliki dua permintaan HTTP dalamcurl
panggilan ...HEAD
bukanGET
atauPOST
. 3. Seharusnya TIDAK PERNAH digunakan untuk "hanya melihat header" kecuali Anda mencoba untuk melihat bagaimana server Anda merespons berbedaHEAD
sebagai lawan dari aGET
. Sebagian besar waktu akan sama, tetapi tidak selalu. Hanya untuk melihat tajuk yang digunakancurl -o /dev/null -D /dev/stdout
. Itu akan memberikan hasil yang diharapkan 100% dari waktu.Opsi verbose berguna, tetapi jika Anda ingin melihat segala sesuatu yang dikeriting (termasuk badan HTTP yang dikirim, dan bukan hanya header), saya sarankan menggunakan salah satu opsi di bawah ini:
--trace-ascii -
# stdout--trace-ascii output_file.txt
# filesumber
Anda mendapatkan hasil tajuk yang bagus dengan perintah berikut:
-L, --location
ikuti arahan ulang-v, --verbose
lebih banyak output, menunjukkan arah-s, --silent
jangan tampilkan bilah kemajuan-o, --output /dev/null
jangan tampilkan tubuh yang diterimaAtau versi yang lebih pendek:
Hasil dalam:
Seperti yang Anda lihat
curl
output baik header keluar dan masuk dan melompati data tubuh meskipun memberitahu Anda seberapa besar tubuh.Selain itu untuk setiap baris arah ditunjukkan sehingga mudah dibaca. Saya merasa berguna untuk melacak rantai pengalihan yang panjang.
sumber
-v
opsi dengan suara lebih tinggi. Juga, hanya untuk singkatnya ini juga bisacurl -Lvso /dev/null <target>
selamao
datang di akhir.Perintah seperti di bawah ini akan menampilkan tiga bagian: header permintaan, header respons, dan data (dipisahkan oleh CRLF). Ini menghindari informasi teknis dan kebisingan sintaksis yang ditambahkan oleh curl.
Perintah akan menghasilkan output berikut:
Deskripsi:
-vs
- tambahkan header (-v) tetapi hapus progress bar (-s)2>&1
- gabungkan stdout dan stderr menjadi stdout tunggalsed
- edit respons yang dihasilkan oleh curl menggunakan perintah di bawah ini/^* /d
- hapus baris yang dimulai dengan '*' (info teknis)/bytes data]$/d
- hapus baris yang diakhiri dengan 'data byte]' (info teknis)s/> //
- hapus awalan '>'s/< //
- hapus awalan '<'sumber
Saya harus mengatasi masalah ini sendiri, ketika debugging aplikasi web.
-v
bagus, tapi agak terlalu bertele-tele untuk seleraku. Ini adalah solusi (khusus bash) yang saya buat:Ini berfungsi karena output dari
-v
dikirim ke stderr, bukan stdout. Dengan mengarahkan ini ke subkulit, kita dapatsed
menghapus garis yang dimulai dengan*
. Karena output nyata tidak melewati subkulit, itu tidak terpengaruh. Menggunakan subkulit agak berat, tapi itu cara termudah untuk mengarahkan stderr ke perintah lain. (Seperti yang saya catat, saya hanya menggunakan ini untuk pengujian, jadi itu berfungsi dengan baik untuk saya.)sumber
opsi -v untuk curl terlalu bertele-tele dalam output kesalahan yang berisi terkemuka
*
(baris status) atau>
(bidang kepala permintaan) atau<
(bidang kepala respons). untuk mendapatkan hanya bidang kepala permintaan:untuk mendapatkan hanya bidang kepala permintaan:
atau untuk membuangnya ke
/tmp/test.txt
file dengan opsi -Duntuk memfilter
-v
output, Anda harus mengarahkan output error ke terminal dan output std ke / dev / null, opsi -s adalah untuk melarang metering progressumber
Jika Anda ingin lebih banyak alternatif, Anda dapat mencoba menginstal klien HTTP baris perintah Modern seperti httpie yang tersedia untuk sebagian besar Sistem Operasi dengan manajer paket seperti minuman, apt-get, pip, yum dll.
misal: - Untuk OSX
Kemudian Anda dapat menggunakannya pada command line dengan berbagai opsi
sumber