it-swarm.com.de

Wie mache ich POST XML-Daten mit curl

Ich möchte XML-Daten mit cURL posten. Ich interessiere mich nicht für Formulare wie in Wie mache ich eine Post-Anfrage mit curl .

Ich möchte XML-Inhalte mithilfe der cURL-Befehlszeilenschnittstelle an einen Webservice senden. So etwas wie:

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

Das obige Muster kann jedoch nicht vom Dienst verarbeitet werden.


Referenzbeispiel in 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());
}
35
Jan Jongboom

-H "text/xml" ist kein gültiger Header. Sie müssen den vollständigen Header angeben:

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

Ich bevorzuge Folgendes:

cat req.xml | curl -X POST -H 'Content-type: text/xml' -d @- http://www.example.com

oder 

curl -X POST -H 'Content-type: text/xml' -d @req.xml http://www.example.com

oder 

curl -X POST -H 'Content-type: text/xml'  -d '<XML>data</XML>' http://www.example.com 
12
stones333

Es ist einfacher, eine Datei (in meinem Fall req.xml) mit dem Inhalt zu verwenden, den Sie senden möchten - wie folgt:

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

Sie sollten auch den Typ 'application/xml' verwenden (Unterschiede erklärt hier ).

Alternativ, ohne dass curl die Datei tatsächlich lesen muss, können Sie die Datei mit cat in stdout spucken und curl so machen, dass sie aus stdout liest:

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

Beide Beispiele sollten identische Serviceleistungen liefern.

8
dk1844

Haben Sie versucht, die Daten mit einer URL-Verschlüsselung zu versehen? cURL kann das für Sie erledigen:

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

Sie können die folgende Lösung ausprobieren:

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