Как мне отправить XML-данные с помощью curl - PullRequest
39 голосов
/ 14 января 2010

Я хочу опубликовать данные XML с помощью cURL. Меня не волнуют формы, как сказано в Как сделать запрос на публикацию с помощью curl .

Я хочу опубликовать содержимое XML на каком-либо веб-сервисе, используя интерфейс командной строки cURL. Что-то вроде:

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 ]

53 голосов
/ 14 января 2010

-H "text/xml" не является допустимым заголовком. Вам необходимо предоставить полный заголовок:

-H "Content-Type: text/xml" 
12 голосов
/ 09 января 2015

Я предпочитаю следующее:

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 
8 голосов
/ 12 марта 2013

Проще использовать файл (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

Оба примера должны выдавать идентичные выходные данные службы.

2 голосов
/ 14 января 2010

Вы пробовали url-кодирование данных? cURL может позаботиться об этом за вас:

curl -H "Content-type: text/xml" --data-urlencode "<XmlContainer xmlns='sads'..." http://myapiurl.com/service.svc/
0 голосов
/ 23 октября 2018

Вы можете попробовать следующее решение:

curl -v -X POST -d @payload.xml https://<API Path> -k -H "Content-Type: application/xml;charset=utf-8"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...