題 如何使用cURL顯示POST數據?


例如,使用-v參數POST到Web服務器:

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

和輸出

> 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)

沒有提到我發布的數據。

cURL中是否有選項在輸出中顯示字符串“firstname = john&lastname = doe”?

注意:顯然我想要的字符串在我執行的命令中,但是還有其他幾個帖子選項,比如--form和--data-ascii等。我希望看到原始數據被發送到服務器。


115
2018-06-01 09:10


起源


您還可以運行tcpdump來捕獲發送到服務器的實際數據。或者wireshark(更好),如果你有。 - Keith
我不確定你能不能。這是默默無聞的安全例子嗎? - stackoverflow.com/questions/198462/... - slotishtype


答案:


我沒有使用的最接近 tcpdump 正在使用 --trace-ascii 選項:

~ 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

不幸的是,當你發帖時,這不起作用 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

146
2018-06-01 10:50



我知道這是你自己的答案,但我認為你可以接受這個作為正確的答案。無論如何它為我解決了,謝謝:-) - Darren Cook
刪除任何 -v 要么 --verbose 因為它們覆蓋了trace指令。 - AlikElzin-kilaka
@AugustinRiedinger它適用於https。我只是試了一下,看到了有效載荷。數據已加密,但由於您是連接的端點,因此您可以使用所有數據,因此curl可以看到它。 - Gerald Kaszuba
運用 --trace-ascii 在OS X 10.8.5 Mountain Lion上為我工作。我上傳了一個包含兩個圖像和一個json主體的多部分錶單實體,一切都按預期工作 - Heath Borders
代替 --trace-ascii /dev/stdout 您可以 --trace-ascii - (短跑) - Adam Michalik


或者你可以測試一下 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"
}

19
2017-09-30 09:21





你可以用 查爾斯 和 curl --proxy localhost:8888。 Simples!


7
2017-08-28 13:51



不,它不適用於https。接受的答案很好,更容易。 - akostadinov
https 這個問題不是一個要求:p - Dori
@CasparHarmer你接受的答案是什麼問題?如果你需要更多,TCPdump可以做到這一點。 - Gewure
這發生在3年前。我記不起來。 - Caspar Harmer


想添加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
)

7
2018-05-21 13:04