Bagaimana Anda menampilkan data POST dengan cURL?


140

Sebagai contoh, POSTing ke server web dengan argumen -v:

curl -v http://testserver.com/post -d "firstname=john&lastname=doe"

Dan hasilnya

> POST /post HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
> Host: testserver.com
> Accept: */*
> Content-Length: 28
> Content-Type: application/x-www-form-urlencoded
> 
< HTTP/1.1 200 OK
(etc)

Tidak disebutkan data yang saya posting.

Apakah ada opsi di cURL untuk menampilkan string "firstname = john & lastname = doe" di output?

Catatan: Jelas string yang saya inginkan ada di perintah yang saya jalankan, tetapi ada beberapa opsi posting lain seperti --form dan --data-ascii dll. Saya ingin melihat data mentah dikirim ke server.


1
Anda juga dapat menjalankan tcpdump untuk mengambil data aktual yang dikirim ke server. Atau wireshark (lebih baik) jika Anda memilikinya.
Keith

Saya tidak yakin Anda bisa. Apakah ini contoh keamanan oleh ketidakjelasan? - stackoverflow.com/questions/198462/…
slotishtype

Jawaban:


176

Yang paling dekat yang saya dapatkan tanpa menggunakan tcpdumpadalah menggunakan --trace-asciiopsi:

~ curl http://w3.org/ -d "hello=there" --trace-ascii /dev/stdout
== Info: About to connect() to w3.org port 80 (#0)
== Info:   Trying 128.30.52.45... == Info: connected
== Info: Connected to w3.org (128.30.52.45) port 80 (#0)
=> Send header, 210 bytes (0xd2)
0000: POST / HTTP/1.1
0011: User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.1
0051: 9.7 OpenSSL/0.9.8l zlib/1.2.3
0070: Host: w3.org
007e: Accept: */*
008b: Content-Length: 11
009f: Content-Type: application/x-www-form-urlencoded
00d0: 
=> Send data, 11 bytes (0xb)
0000: hello=there

Sayangnya, ini tidak berfungsi ketika Anda memposting multipart/form-data:

~ curl http://w3.org/ -F hello=there -F testing=123 --trace-ascii /dev/stdout
== Info: About to connect() to w3.org port 80 (#0)
== Info:   Trying 128.30.52.45... == Info: connected
== Info: Connected to w3.org (128.30.52.45) port 80 (#0)
=> Send header, 270 bytes (0x10e)
0000: POST / HTTP/1.1
0011: User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.1
0051: 9.7 OpenSSL/0.9.8l zlib/1.2.3
0070: Host: w3.org
007e: Accept: */*
008b: Content-Length: 244
00a0: Expect: 100-continue
00b6: Content-Type: multipart/form-data; boundary=--------------------
00f6: --------19319e4d1b79
010c: 
<= Recv header, 32 bytes (0x20)
0000: HTTP/1.1 301 Moved Permanently

4
Saya tahu itu adalah jawaban Anda sendiri, tetapi saya pikir Anda dapat menerima ini sebagai jawaban yang benar. Itu menyelesaikannya untuk saya, terima kasih :-)
Darren Cook

4
Hapus salah satu -vatau --verbosesaat mereka menimpa jejak jejak.
AlikElzin-kilaka

2
@AugustinRiedinger Berhasil dengan https. Saya baru saja mencobanya dan melihat muatannya. Data dienkripsi tetapi karena Anda adalah titik akhir dari koneksi, Anda memiliki semua data yang tersedia untuk Anda, dan oleh karena itu curl dapat melihatnya.
gak

2
Menggunakan --trace-asciibekerja untuk saya di OS X 10.8.5 Mountain Lion. Saya telah mengunggah entitas bentuk multi bagian dengan dua gambar dan tubuh json dan semuanya berfungsi seperti yang diharapkan
Heath Borders

4
Alih-alih --trace-ascii /dev/stdoutAnda dapat --trace-ascii -(lari)
Adam Michalik

27

Atau Anda dapat menguji dengan https://httpbin.org/

$ curl https://httpbin.org/post -d "firstname=john&lastname=doe"
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "firstname": "john", 
    "lastname": "doe"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "27", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.43.0"
  }, 
  "json": null, 
  "origin": "78.228.163.126", 
  "url": "https://httpbin.org/post"
}

12

Ingin menambahkan alternatif netcat

#!/bin/bash
nc -l 8080 &

curl "http://localhost:8080" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
--data @<(cat <<EOF
{
  "me": "$USER",
  "something": $(date +%s)
}
EOF
)

9

Anda bisa menggunakan Charles dan curl --proxy localhost:8888. Sederhana!


4
tidak, ini tidak berfungsi dengan https. Jawaban yang diterima baik dan mudah.
akostadinov

httpsbukan persyaratan dalam pertanyaan: p
Dori

@CasparHarmer apa masalah Anda dengan jawaban yang diterima? jika Anda membutuhkan lebih, TCPdump melakukan kesepakatan.
Gewure

Ini terjadi 3 tahun yang lalu. Saya tidak ingat.
Caspar Harmer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.