आप CURL के साथ POST डेटा कैसे प्रदर्शित करते हैं?


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)

मेरे द्वारा पोस्ट किए गए डेटा का कोई उल्लेख नहीं है।

आउटपुट में स्ट्रिंग "firstname = john & lastname = doe" प्रदर्शित करने के लिए cURL में कोई विकल्प है?

नोट: स्पष्ट रूप से मैं जो स्ट्रिंग चाहता हूं वह मेरे द्वारा निष्पादित कमांड में है, लेकिन कई अन्य पोस्ट विकल्प हैं जैसे --फॉर्म और --डाटा-एससीआई आदि मैं कच्चे डेटा को सर्वर पर भेजा जाना देखना चाहता हूं।


1
सर्वर पर भेजे जा रहे वास्तविक डेटा को पकड़ने के लिए आप tcpdump भी चला सकते हैं। या अगर आपको लगता है कि तारों (बेहतर)।
कीथ

मुझे यकीन नहीं है कि आप कर सकते हैं। क्या यह अस्पष्टता से सुरक्षा का एक उदाहरण है? - 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क्योंकि वे ट्रेस निर्देश को ओवरराइड करते हैं।
एलिकएल्ज़िन-किलाका

2
@AugustinRiedinger यह https के साथ ठीक काम करता है। मैंने बस कोशिश की और पेलोड देखा। डेटा एन्क्रिप्ट किया गया है, लेकिन चूंकि आप कनेक्शन के समापन बिंदु हैं, तो आपके पास सभी डेटा उपलब्ध हैं, और इसलिए कर्ल इसे देख सकते हैं।
gak

2
--trace-asciiमेरे लिए OS X 10.8.5 माउंटेन लायन पर काम करना । मैंने दो चित्रों और एक जोंस बॉडी के साथ एक मल्टीपार्ट फॉर्म इकाई अपलोड की है और सब कुछ अपेक्षित रूप से काम किया है
हीथ बॉर्डर

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। साधारण!


4
नहीं, यह https के साथ काम नहीं करता है। स्वीकृत उत्तर ठीक और आसान है।
अकोस्टैडिनोव

httpsप्रश्न में एक आवश्यकता नहीं थी: पी
डोरी

@CasparHarmer स्वीकृत उत्तर के साथ आपकी संभावना क्या है? यदि आपको अधिक की आवश्यकता है, तो TCPdump सौदा करता है।
गवूरे

ऐसा 3 साल पहले हुआ था। मुझे याद नहीं।
कैस्पर हार्मर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.