web-dev-qa-db-fra.com

Comment je POST Données XML avec curl

Je souhaite publier des données XML avec cURL. Je me fiche de formes comme dans Comment faire une demande de publication avec curl .

Je souhaite publier du contenu XML sur un service Web à l'aide de l'interface de ligne de commande cURL. Quelque chose comme:

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

L’échantillon ci-dessus ne peut toutefois pas être traité par le service.


Exemple de référence en 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" n'est pas un en-tête valide. Vous devez fournir l'en-tête complet:

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

Je préfère ce qui suit:

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

ou 

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

ou 

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

Il est plus simple d’utiliser un fichier (req.xml dans mon cas) avec le contenu que vous souhaitez envoyer - comme ceci:

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

Vous devriez également envisager d'utiliser le type 'application/xml' (différences expliquées ici )

Alternativement, sans avoir besoin de faire curl pour lire le fichier, vous pouvez utiliser cat pour cracher le fichier dans la sortie standard et rendre curl lire à partir de la sortie standard comme ceci:

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

Les deux exemples doivent produire une sortie de service identique.

8
dk1844

Avez-vous essayé d'URL-encodage des données? CURL peut s’occuper de cela pour vous:

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

Vous pouvez essayer la solution suivante:

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