คุณแสดงข้อมูล POST ด้วย cURL อย่างไร


139

ตัวอย่างเช่นการโพสต์ไปยังเว็บเซิร์ฟเวอร์ที่มีอาร์กิวเมนต์ -v:

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 เป็นต้นฉันต้องการดูข้อมูลดิบที่ส่งไปยังเซิร์ฟเวอร์


1
คุณยังสามารถรัน tcpdump เพื่อดักจับข้อมูลจริงที่ส่งไปยังเซิร์ฟเวอร์ หรือ wireshark (ดีกว่า) ถ้าคุณมีสิ่งนั้น
Keith

ฉันไม่แน่ใจว่าคุณสามารถ นี่เป็นตัวอย่างของความปลอดภัยโดยความคลุมเครือหรือไม่ - stackoverflow.com/questions/198462/…
slotishtype

คำตอบ:


175

ที่ใกล้เคียงที่สุดที่ฉันได้รับโดยไม่ใช้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

4
ฉันรู้ว่ามันเป็นคำตอบของคุณเอง แต่ฉันคิดว่าคุณสามารถยอมรับสิ่งนี้เป็นคำตอบที่ถูกต้อง มันแก้ไขได้สำหรับผมแล้วขอบคุณ :-)
คาร์เรนคุก

4
ลบใด ๆ-vหรือ--verboseตามที่พวกเขาแทนที่คำสั่งการติดตาม
AlikElzin-kilaka

2
@AugustinRiedinger ใช้งานได้ดีกับ https ฉันแค่ลองดูและดูน้ำหนักบรรทุก ข้อมูลถูกเข้ารหัส แต่เนื่องจากคุณเป็นจุดสิ้นสุดของการเชื่อมต่อคุณจึงมีข้อมูลทั้งหมดที่คุณสามารถใช้ได้ดังนั้นขดจึงสามารถดูได้
gak

2
การใช้--trace-asciiงานได้กับฉันใน OS X 10.8.5 Mountain Lion ผมได้อัพโหลดเป็นนิติบุคคลรูปแบบหลายส่วนที่มีภาพสองภาพและร่างกาย JSON และทำงานทุกอย่างเป็นไปตามคาด
เฮลธ์พรมแดน

4
แทนการ--trace-ascii /dev/stdoutที่คุณสามารถ--trace-ascii -(รีบ)
อดัม Michalik

27

หรือคุณสามารถทดสอบกับ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

ต้องการเพิ่มทางเลือก 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

คุณสามารถใช้ชาร์ลส์curl --proxy localhost:8888และ Simples!


4
ไม่มันไม่ทำงานกับ https คำตอบที่ยอมรับได้ดีและง่ายขึ้น
akostadinov

httpsไม่ใช่ข้อกำหนดในคำถาม: p
Dori

@CarparHarmer คุณมีปัญหาอะไรกับคำตอบที่ยอมรับ ถ้าคุณต้องการมากกว่านี้ TCPdump ก็จัดการได้
Gewure

เรื่องนี้เกิดขึ้นเมื่อ 3 ปีก่อน ผมจำไม่ได้.
Caspar Harmer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.