【问题标题】:How do I POST XML data with curl如何使用 curl 发布 XML 数据
【发布时间】:2011-01-05 00:46:00
【问题描述】:

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

我想使用 cURL 命令行界面将 XML 内容发布到一些网络服务。比如:

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

【问题讨论】:

  • “服务无法处理”是什么意思?服务是否正确接收它?是否正确发布?服务从您的请求中收到什么?
  • 服务无法识别请求。我收到一个内部错误页面。使用我的 C# 示例时不会发生这种情况。发布的数据是一样的。
  • 您收到什么 HTTP 响应代码? 500?
  • 我的预感是数据“转义”到 Web 服务(如 %3C%3Fxml+version=%221.0%22+encoding%3D%22UTF-8%),这就是我在 java 中遇到的......

标签: http post curl


【解决方案1】:

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

-H "Content-Type: text/xml" 

【讨论】:

    【解决方案2】:

    我更喜欢以下命令行选项:

    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 
    

    【讨论】:

    • 感谢内联数据的示例 :-)
    • 我们可以将这个@req.xml 文件保存在哪里?这就是我要传递的空文件
    【解决方案3】:

    使用包含您要发送的内容的文件(在我的情况下为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

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

    【讨论】:

    • 另外,您不需要使用正文数据指定 -X POST(显然是因为 HTTP 逻辑)。如果你这样做了,现代卷发会警告Note: Unnecessary use of -X or --request, POST is already inferred.
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 2015-05-05
        • 2014-01-22
        • 2012-06-20
        相关资源
        最近更新 更多