2010-01-14 11 views
30

के साथ एक्सएमएल डेटा कैसे पोस्ट करूं मैं कर्ल के साथ एक्सएमएल डेटा पोस्ट करना चाहता हूं। मुझे How do I make a post request with curl में बताए गए फॉर्मों की परवाह नहीं है।मैं कर्ल

मैं कर्ल कमांड लाइन इंटरफ़ेस का उपयोग कर कुछ webservice पर XML सामग्री पोस्ट करना चाहता हूं। कुछ ऐसा:

curl -H "text/xml" -d "<XmlContainer xmlns='sads'..." http://myapiurl.com/service.svc/ 

उपरोक्त नमूना हालांकि सेवा द्वारा संसाधित नहीं किया जा सकता है। सी # में


संदर्भ उदाहरण:

WebRequest req = HttpWebRequest.Create("http://myapiurl.com/service.svc/"); 
req.Method = "POST"; 
req.ContentType = "text/xml"; 
using(Stream s = req.GetRequestStream()) 
{ 
    using (StreamWriter sw = new StreamWriter(s)) 
     sw.Write(myXMLcontent); 
} 
using (Stream s = req.GetResponse().GetResponseStream()) 
{ 
    using (StreamReader sr = new StreamReader(s)) 
     MessageBox.Show(sr.ReadToEnd()); 
} 
+0

आपका क्या मतलब है "यह सेवा द्वारा संसाधित नहीं किया जा सकता है?" क्या यह सेवा सही तरीके से प्राप्त कर रही है? क्या यह सही ढंग से पोस्ट किया जा रहा है? सेवा आपके अनुरोध से क्या प्राप्त करती है? –

+0

सेवा अनुरोध को पहचान नहीं है। मुझे एक आंतरिक त्रुटि पृष्ठ मिलता है। मेरे सी # उदाहरण का उपयोग करते समय ऐसा नहीं होता है। पोस्ट किया गया डेटा वही है। –

+0

आपको क्या HTTP प्रतिक्रिया कोड प्राप्त होता है? 500? –

उत्तर

42

-H "text/xml" एक वैध हैडर नहीं है। पूर्ण हेडर प्रदान करने की आवश्यकता:

-H "Content-Type: text/xml" 
+0

अच्छा सरल जवाब, धन्यवाद @ बेन: डी –

1

आप यूआरएल-एन्कोडिंग डेटा की कोशिश की है? cURL आप के लिए है कि की देखभाल कर सकते हैं:

curl -H "Content-type: text/xml" --data-urlencode "<XmlContainer xmlns='sads'..." http://myapiurl.com/service.svc/ 
8

यह सामग्री के साथ (मेरे मामले में req.xml) एक फ़ाइल का उपयोग करने आप भेजना चाहते हैं सरल है - इस तरह:

curl -H "Content-Type: text/xml" -d @req.xml -X POST http://localhost/asdf

आप चाहिए , भी उपयोग करते हुए प्रकार 'application/xml' पर विचार (मतभेद here समझाया गया है)

वैकल्पिक रूप से, कर्ल वास्तव में फ़ाइल को पढ़ने बनाने की जरूरत के बिना, आप cat उपयोग कर सकते हैं च थूकने stdout में इले और बनाने curl इस तरह stdout से पढ़ने के लिए:

cat req.xml | curl -H "Content-Type: text/xml" -d @- -X POST http://localhost/asdf

दोनों उदाहरण समान सेवा उत्पादन का उत्पादन करना चाहिए।

+0

बोनस के रूप में, आपको बॉडी डेटा के साथ '-X POST' निर्दिष्ट करने की आवश्यकता नहीं है (क्योंकि HTTP तर्क, स्पष्ट रूप से)। यदि आप करते हैं, तो आधुनिक कर्ल चेतावनी देंगे 'नोट: -एक्स या - अनुरोध का अनावश्यक उपयोग, POST पहले ही अनुमानित है। –

5

मैं निम्नलिखित perfer:

cat req.xml | curl -X POST -H 'Content-type: text/xml' -d @- http://www.example.com 

या

curl -X POST -H 'Content-type: text/xml' -d @req.xml http://www.example.com 

या

curl -X POST -H 'Content-type: text/xml' -d '<XML>data</XML>' http://www.example.com 
+0

इनलाइन डेटा के साथ उदाहरण के लिए धन्यवाद :-) – Oliver