如何使用curl发布XML数据

时间:2010-01-14 10:45:48

标签: http post curl

我想用cURL发布XML数据。我并不关心How do I make a post request with curl中所说的形式。

我想使用cURL命令行界面将XML内容发布到某些web服务。类似的东西:

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

然而,上述样本无法由服务处理。


C#中的参考示例:

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());
}

5 个答案:

答案 0 :(得分:52)

-H "text/xml"不是有效的标头。您需要提供完整的标题:

-H "Content-Type: text/xml" 

答案 1 :(得分:12)

我更喜欢以下内容:

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 

答案 2 :(得分:8)

使用您要发送的内容的文件(在我的情况下为req.xml)更简单 - 就像这样:

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

你也应该考虑使用'application / xml'类型(差异解释here

或者,不需要让curl实际读取文件,您可以使用cat将文件吐入stdout并使curl从stdout读取如下:

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

两个示例都应该生成相同的服务输出。

答案 3 :(得分:2)

您是否尝试过对数据进行网址编码? cURL可以为您解决这个问题:

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

答案 4 :(得分:0)

您可以尝试以下解决方案:

curl -v -X POST -d @payload.xml https://<API Path> -k -H "Content-Type: application/xml;charset=utf-8"