Ответ 1
-H "text/xml"
не является допустимым заголовком. Вам необходимо предоставить полный заголовок:
-H "Content-Type: text/xml"
Я хочу отправить XML-данные с помощью cURL. Мне не нравятся такие формы, как сказано в Как сделать запрос на отправку с помощью curl.
Я хочу отправить XML-контент в некоторый web-сервис, используя интерфейс командной строки cURL. Что-то вроде:
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());
}
-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" (различия объяснены здесь)
В качестве альтернативы, без необходимости делать завиток, действительно читайте файл, вы можете использовать cat
, чтобы вставить файл в stdout и сделать curl
для чтения из stdout следующим образом:
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"