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());
}
-H "text/xml"
は有効なヘッダーではありません。完全なヘッダーを提供する必要があります。
-H "Content-Type: text/xml"
次のコマンドラインオプションを使用します。
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
私の場合)送信したいコンテンツを含む-このように:
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
両方の例で同一のサービス出力が生成されるはずです。
データをURLエンコードしてみましたか? cURLはあなたのためにそれの世話をすることができます:
curl -H "Content-type: text/xml" --data-urlencode "<XmlContainer xmlns='sads'..." http://myapiurl.com/service.svc/
次の解決策を試すことができます。
curl -v -X POST -d @payload.xml https://<API Path> -k -H "Content-Type: application/xml;charset=utf-8"