CURL का उपयोग करके बॉडी, हेडर और HTTP पैरामेट्स के साथ POST कैसे भेजें?


39

मुझे CURL में सरल POST कमांड का उपयोग करने के कई उदाहरण मिले, लेकिन मुझे पूर्ण HTTP POST कमांड भेजने के तरीके के उदाहरण नहीं मिले, जिसमें शामिल हैं:

  • हेडर (मूल प्रमाणीकरण)
  • HTTP परम्स ( s=1&r=33)
  • बॉडी डेटा, कुछ XML स्ट्रिंग

मैंने पाया है:

echo "this is body" | curl -d "ss=ss&qq=11" http://localhost/

यह काम नहीं करता है, और यह शरीर के रूप में HTTP मापदंडों को भेजता है।



सुपरसर्वर के संभावित डुप्लिकेट की तरह महसूस करता है। http: //www.questions/149329/… मुझे पता है कि यह हेडर और पसंद के बारे में विशिष्ट है लेकिन अन्य प्रश्न के उत्तर भी इसे संभालते हैं। मैं आमतौर पर इस तरह के एक पुराने लोकप्रिय सवाल को एक ठग के रूप में चिह्नित नहीं करता हूं, लेकिन यह एक अपवाद है। पूर्णता के लिए कुछ सामान को स्थानांतरित करने की आवश्यकता हो सकती है।
माइकल डुरंट

वास्तव में अन्य उत्तर में विशेष रूप से उल्लेख किया गया है --headerऔर यह एक नहीं है
माइकल डुरंट

जवाबों:


15

टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है इसलिए इसे एक उत्तर के रूप में छोड़ दें जिससे यह मदद मिल सके।

curl -L -v --post301 --post302 -i -X PUT -T "${aclfile}"  \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  ${host}:${port}${resource}

यह वही है जो मैंने एक S3 बाल्टी एसीएल पुट ऑपरेशन के लिए इस्तेमाल किया था। हेड-इन-एच और बॉडी जो एक xml फ़ाइल है, $-aclfile} में है -T। आप इसे आउटपुट से देख सकते हैं:

/aaa/?acl
* About to connect() to 192.168.57.101 port 80 (#0)
*   Trying 192.168.57.101...
* Connected to 192.168.57.101 (192.168.57.101) port 80 (#0)
> PUT /aaa/?acl HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.57.101
> Accept: */*
> Date: Thu, 18 Aug 2016 08:01:44 GMT
> Content-Type: application/x-www-form-urlencoded; charset=utf-8
> Authorization: AWS WFBZ1S6SO0DZHW2LRM6U:r84lr/lPO0JCpfk5M3GRJfHdUgQ=
> Content-Length: 323
> Expect: 100-continue
>
< HTTP/1.1 100 CONTINUE
HTTP/1.1 100 CONTINUE

* We are completely uploaded and fine
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
< Content-Type: application/xml
Content-Type: application/xml
< Content-Length: 0
Content-Length: 0
< Date: Thu, 18 Aug 2016 08:01:45 GMT
Date: Thu, 18 Aug 2016 08:01:45 GMT

<
* Connection #0 to host 192.168.57.101 left intact

यदि url params में "+" जैसे विशेष चिह्न हैं, तो प्रत्येक param (विशेष चिह्नों वाले) के लिए -data-urlencode का उपयोग करें:

curl -G -H "Accept:..." -H "..." --data-urlencode "beginTime=${time}+${zone}" --data-urlencode "endTime=${time}+${zone}" "${url}"

57

HTTP "पैरामीटर" URL का हिस्सा हैं:

"http://localhost/?name=value&othername=othervalue"

मूल प्रमाणीकरण के पास एक अलग विकल्प है, कस्टम हेडर बनाने की कोई आवश्यकता नहीं है:

-u "user:password"

POST "निकाय" को --data( application/x-www-form-urlencodedया) या --form(के लिए multipart/form-data) के माध्यम से भेजा जा सकता है :

-F "foo=bar"                  # 'foo' value is 'bar'
-F "foo=<foovalue.txt"        # the specified file is sent as plain text input
-F "foo=@foovalue.txt"        # the specified file is sent as an attachment

-d "foo=bar"
-d "foo=<foovalue.txt"
-d "foo=@foovalue.txt"
-d "@entirebody.txt"          # the specified file is used as the POST body

--data-binary "@binarybody.jpg"

इसलिए, संक्षेप में:

curl -d "this is body" -u "user:pass" "http://localhost/?ss=ss&qq=11"

@ ईमरसन: यह होना चाहिए; PHP के मॉड्यूल को लगता है कि मूल C libcurl में सभी कार्य हैं, और ऊपर एक काफी बुनियादी विशेषता है। मैं हालांकि उपयोग करने के लिए सटीक कार्य नहीं जानता। यदि आप इसे नहीं पा सकते हैं, तो स्टैक ओवरफ्लो पर पूछें।
ग्रेविटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.