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());
}
-H "text/xml"
n'est pas un en-tête valide. Vous devez fournir l'en-tête complet:
-H "Content-Type: text/xml"
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
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.
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/
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"