web-dev-qa-db-ja.com

どうすればPOST curlを使用したXMLデータ

CURLでXMLデータを投稿したい。 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());
}
39
Jan Jongboom

-H "text/xml"は有効なヘッダーではありません。完全なヘッダーを提供する必要があります。

-H "Content-Type: text/xml" 
54
Ben James

次のコマンドラインオプションを使用します。

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 
12
stones333

ファイル(req.xml私の場合)送信したいコンテンツを含む-このように:

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

タイプ 'application/xml'も使用することを検討する必要があります(違いの説明 ここ

または、curlに実際にファイルを読み取らせる必要なく、catを使用してファイルを標準出力に吐き出し、curlを作成して標準出力から読み取ることができます。

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

両方の例で同一のサービス出力が生成されるはずです。

8
dk1844

データをURLエンコードしてみましたか? cURLはあなたのためにそれの世話をすることができます:

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

次の解決策を試すことができます。

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