Saya pikir curl -vpaling mudah. Ini akan memuntahkan header permintaan (baris yang diawali dengan '>') tanpa harus menulis ke file:
$ curl -v -I -H "Testing: Test header so you see this works" http://stackoverflow.com/
* About to connect() to stackoverflow.com port 80 (#0)
* Trying 69.59.196.211... connected
* Connected to stackoverflow.com (69.59.196.211) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.16.3 (i686-pc-cygwin) libcurl/7.16.3 OpenSSL/0.9.8h zlib/1.2.3 libssh2/0.15-CVS
> Host: stackoverflow.com
> Accept: */*
> Testing: Test header so you see this works
>
< HTTP/1.0 200 OK
...
@PiotrekDe -D -rapi, tetapi tidak berguna bagi saya karena hanya menduplikasi header yang -vsudah ditampilkan. Jika Anda ingin mereka tidak diperbaiki untuk konsumsi mesin otomatis, maka mungkin akan lebih baik dalam hal itu, tapi saya hanya ingin melihat apa masalah yang lebih detail.
Pysis
1
Ada dua fitur yang sangat membantu dari flag "verbose": pertama, flag ini juga mencetak proses jabat tangan TLS ketika mengakses situs web melalui HTTPS, seperti curl -v https://www.example.com; kedua, itu juga mencetak CONNECTpermintaan jika Anda mengunjungi situs melalui proxy HTTP , seperti curl --proxy my-proxy:8080 http://www.example.com. Saya percaya ini akan membantu lebih banyak pengguna jika beberapa contoh dari dua fitur ini disebutkan dalam jawaban ini.
Franklin Yu
1
TL; DR: Jangan gunakan-I Di dunia modern, ketika orang bertanya tentang melihat header, mereka mungkin berbicara tentang API. Dan jika Anda menggunakan -Imentalitas "Saya gunakan untuk melihat header dengan server web Apache saya", Anda akan membuang banyak waktu untuk mengembangkan suatu HEADmetode ketika Anda mungkin bermaksud menggunakannya GET. Berhentilah memberi tahu orang untuk menggunakan -I. Jika mereka mau HEAD, gunakan -X HEAD(TWSS)
Bruno Bronosky
141
Pertanyaannya tidak menentukan apakah perintah baris perintah bernama curldimaksudkan atau seluruh pustaka cURL.
Kode PHP berikut ini menggunakan pustaka cURL menggunakan parameter pertama sebagai metode HTTP (mis. "GET", "POST", "OPTIONS") dan parameter kedua sebagai URL.
Ini adalah jawaban terbaik, karena file yang digunakan dalam metode ini berisi semua yang ada di curl_getinfo () yang dirujuk di bawah ini, bersama dengan perincian lebih lanjut tentang permintaan dan responsnya.
Mike_K
3
Anda dapat menggunakan CURLOPT_WRITEHEADER untuk informasi tajuk dan CURLOPT_FILE untuk seluruh transfer
sturrockad
1
Ingatlah bahwa jika koneksi ditolak file yang ditentukan dengan CURLOPT_WRITEHEADER dan CURLOPT_FILEkosong.
eithed
34
Siapa yang mengatakan apa-apa tentang menggunakanphp?
Eddie B
1
Saya telah memutakhirkan jawaban Anda karena sementara pertanyaannya tidak terkait dengan php, jawaban berbasis php Anda mengarahkan saya ke arah yang benar untuk menyelesaikan masalah saya sendiri dengan mengirimkan token pembawa. Terima kasih. Saya menyatakan alasan saya di sini hanya dalam upaya sia-sia untuk memiliki pertanyaan ini muncul di pencarian google masa depan untuk php devs dengan masalah yang sama.
Chris
49
Satu-satunya cara saya berhasil melihat tajuk keluar (curl with php) menggunakan opsi berikut:
menghasilkan file curl.traceyang dimulai sebagai berikut:
== Info: About to connect() to www.google.com port 80 (#0)
== Info: Trying 209.85.229.104... == Info: connected
== Info: Connected to www.google.com (209.85.229.104) port 80 (#0)
=> Send header, 145 bytes (0x91)
0000: GET / HTTP/1.1
0010: User-Agent: curl/7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3
0050: OpenSSL/0.9.7l zlib/1.2.3
006c: Host: www.google.com
0082: Accept: */*
008f:
Itu juga mendapat respons (respons 302, tepatnya tetapi tidak relevan) yang dicatat.
Jika Anda hanya ingin menyimpan header respons , gunakan --dump-headeropsi:
curl -D file url
curl --dump-header file url
Jika Anda memerlukan informasi lebih lanjut tentang opsi yang tersedia, gunakan curl --help | less(ini menghasilkan beberapa ratus garis output tetapi menyebutkan banyak opsi). Atau temukan halaman manual di mana ada lebih banyak penjelasan tentang apa arti opsi tersebut.
Ini sangat bertele-tele, tetapi tentu saja menunjukkan segala yang harus Anda ketahui.
tripleee
27
Saya mencoba jawabannya di sini dan menemukan bahwa yang paling berguna dan termudah belum terdaftar sebagai jawaban, tetapi itu adalah:
curl -v https://example.com/path
Ini mencetak header PERMINTAAN serta header RESPONS plus berguna lainnya seperti sertifikat SSL dan apakah koneksi TCP yang ada digunakan kembali. yang -vflag dapat dikombinasikan dengan bendera lainnya, tentu saja, seperti untuk tindak pengalihan dan cepat untuk HTTP otentikasi:
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 tahu ini sedikit terlambat, tetapi metode favorit saya untuk melakukan ini adalah netcat, karena Anda mendapatkan persis apa yang curldikirim; ini dapat berbeda dari opsi --traceatau --trace-asciiyang tidak akan menampilkan karakter non-ASCII dengan benar (mereka hanya ditampilkan sebagai titik atau perlu diterjemahkan).
Anda dapat melakukan ini dengan sangat mudah dengan membuka dua terminal windows, pada tipe pertama:
nc -l localhost 12345
Ini membuka proses mendengarkan pada port 12345 dari mesin lokal Anda.
Di jendela terminal kedua masukkan perintah curl Anda, misalnya:
curl --form 'foo=bar' localhost:12345
Di jendela terminal pertama Anda akan melihat secara tepat ikal apa yang dikirim dalam permintaan.
Sekarang tentu saja nctidak akan mengirim apa pun sebagai respons (kecuali Anda mengetiknya sendiri), jadi Anda perlu menghentikan perintah curl (control-c) dan ulangi proses untuk setiap tes.
Namun, ini adalah opsi yang berguna untuk hanya men-debug permintaan Anda, karena Anda tidak melibatkan pulang-pergi di mana pun, atau menghasilkan permintaan berulang yang palsu di suatu tempat sampai Anda melakukannya dengan benar; setelah Anda puas dengan perintahnya, cukup arahkan kembali ke URL yang valid dan Anda siap melakukannya.
Anda juga dapat melakukan hal yang sama untuk perpustakaan CURL, cukup edit permintaan Anda untuk menunjuk ke ncpendengar lokal sampai Anda puas.
// Parse response and read cookies
preg_match_all('/^Set-Cookie: (.*?)=(.*?);/m', $response, $matches);
// Build an array with cookies
foreach( $matches[1] as $index => $cookie )
$cookies[$cookie] = $matches[2][$index];
return $cookies;
} // end http_login_client
Terima kasih, walaupun tidak menjawab pertanyaan dengan tepat, inilah yang saya butuhkan. Perangkat A membuat permintaan, Perangkat B memeriksa permintaan telah dibuat.
Jawaban:
Saya pikir
curl -v
paling mudah. Ini akan memuntahkan header permintaan (baris yang diawali dengan '>') tanpa harus menulis ke file:sumber
curl -Ivs http://example.com > /dev/null
:-I
untukHEAD
permintaan,-v
menampilkan tajuk yang dikirim,-s
menyembunyikan bilah progres,> /dev/null
hanya menampilkan keluaran -v, menghindari duplikasi.-D -
rapi, tetapi tidak berguna bagi saya karena hanya menduplikasi header yang-v
sudah ditampilkan. Jika Anda ingin mereka tidak diperbaiki untuk konsumsi mesin otomatis, maka mungkin akan lebih baik dalam hal itu, tapi saya hanya ingin melihat apa masalah yang lebih detail.curl -v https://www.example.com
; kedua, itu juga mencetakCONNECT
permintaan jika Anda mengunjungi situs melalui proxy HTTP , seperticurl --proxy my-proxy:8080 http://www.example.com
. Saya percaya ini akan membantu lebih banyak pengguna jika beberapa contoh dari dua fitur ini disebutkan dalam jawaban ini.-I
Di dunia modern, ketika orang bertanya tentang melihat header, mereka mungkin berbicara tentang API. Dan jika Anda menggunakan-I
mentalitas "Saya gunakan untuk melihat header dengan server web Apache saya", Anda akan membuang banyak waktu untuk mengembangkan suatuHEAD
metode ketika Anda mungkin bermaksud menggunakannyaGET
. Berhentilah memberi tahu orang untuk menggunakan-I
. Jika mereka mauHEAD
, gunakan-X HEAD
(TWSS)Pertanyaannya tidak menentukan apakah perintah baris perintah bernama
curl
dimaksudkan atau seluruh pustaka cURL.Kode PHP berikut ini menggunakan pustaka cURL menggunakan parameter pertama sebagai metode HTTP (mis. "GET", "POST", "OPTIONS") dan parameter kedua sebagai URL.
Contoh penggunaan:
Perhatikan bahwa hasilnya hampir identik dengan baris perintah berikut
sumber
CURLOPT_WRITEHEADER
danCURLOPT_FILE
kosong.php?
Satu-satunya cara saya berhasil melihat tajuk keluar (curl with php) menggunakan opsi berikut:
Mendapatkan info debug Anda:
sumber
var_dump $data
akan mengembalikan header respons dan juga badan respons. Var_dumpcurl_getinfo($ch)
akan memberi Anda header permintaan.CURLOPT_HEADER
adalah header respons -CURLINFO_HEADER_OUT
adalah header permintaan. Inilah yang diminta OP :)The
--trace-ascii
pilihan untuk keriting akan menampilkan header permintaan, serta header respon dan respon tubuh.Misalnya, perintahnya
menghasilkan file
curl.trace
yang dimulai sebagai berikut:Itu juga mendapat respons (respons 302, tepatnya tetapi tidak relevan) yang dicatat.
Jika Anda hanya ingin menyimpan header respons , gunakan
--dump-header
opsi:Jika Anda memerlukan informasi lebih lanjut tentang opsi yang tersedia, gunakan
curl --help | less
(ini menghasilkan beberapa ratus garis output tetapi menyebutkan banyak opsi). Atau temukan halaman manual di mana ada lebih banyak penjelasan tentang apa arti opsi tersebut.sumber
curl --trace-ascii {filename} atau gunakan tanda hubung tunggal alih-alih nama file untuk mengirimnya ke stdout:
CURLOPT_DEBUGFUNCTION jika Anda menggunakan libcurl
Ini menunjukkan kepada Anda segala sesuatu yang dikirim dan diterima, dengan beberapa info tambahan dimasukkan.
sumber
Saya mencoba jawabannya di sini dan menemukan bahwa yang paling berguna dan termudah belum terdaftar sebagai jawaban, tetapi itu adalah:
Ini mencetak header PERMINTAAN serta header RESPONS plus berguna lainnya seperti sertifikat SSL dan apakah koneksi TCP yang ada digunakan kembali. yang
-v
flag dapat dikombinasikan dengan bendera lainnya, tentu saja, seperti untuk tindak pengalihan dan cepat untuk HTTP otentikasi:Semoga ini membantu.
sumber
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 tahu ini sedikit terlambat, tetapi metode favorit saya untuk melakukan ini adalah
netcat
, karena Anda mendapatkan persis apa yangcurl
dikirim; ini dapat berbeda dari opsi--trace
atau--trace-ascii
yang tidak akan menampilkan karakter non-ASCII dengan benar (mereka hanya ditampilkan sebagai titik atau perlu diterjemahkan).Anda dapat melakukan ini dengan sangat mudah dengan membuka dua terminal windows, pada tipe pertama:
Ini membuka proses mendengarkan pada port 12345 dari mesin lokal Anda.
Di jendela terminal kedua masukkan perintah curl Anda, misalnya:
Di jendela terminal pertama Anda akan melihat secara tepat ikal apa yang dikirim dalam permintaan.
Sekarang tentu saja
nc
tidak akan mengirim apa pun sebagai respons (kecuali Anda mengetiknya sendiri), jadi Anda perlu menghentikan perintah curl (control-c) dan ulangi proses untuk setiap tes.Namun, ini adalah opsi yang berguna untuk hanya men-debug permintaan Anda, karena Anda tidak melibatkan pulang-pergi di mana pun, atau menghasilkan permintaan berulang yang palsu di suatu tempat sampai Anda melakukannya dengan benar; setelah Anda puas dengan perintahnya, cukup arahkan kembali ke URL yang valid dan Anda siap melakukannya.
Anda juga dapat melakukan hal yang sama untuk perpustakaan CURL, cukup edit permintaan Anda untuk menunjuk ke
nc
pendengar lokal sampai Anda puas.sumber
buang header dalam satu file dan payload dari respons dalam file yang berbeda
sumber
Anda juga dapat menggunakan
-I
opsi jika Anda ingin mengirim permintaan HEAD dan bukan permintaan GET.sumber
Berikut ini adalah klien http saya di php untuk memasukkan kueri posting dengan cookie:
/// DEBUG info echo $ response; var_dump (curl_getinfo ($ ch)); ///
sumber
Anda bisa melihatnya dengan menggunakan
-iv
sumber
Anda dapat menggunakan wireshark atau tcpdump untuk melihat lalu lintas jaringan apa pun (http juga).
sumber
Buat contoh permintaan ke https://http-tools.appspot.com/reflect-http-request/some-unique-id dan periksa isi permintaan ini (tajuk permintaan, badan permintaan, parameter permintaan) dengan url pencari yang sesuai https : //http-tools.appspot.com/reflect-http-request-finder/some-unique-id . Anda dapat menggunakan string apa pun alih-alih
some-unique-id
, periksa https://http-tools.appspot.com untuk detail selengkapnya.sumber