Curl pour attaquer un Web service SOAP
L’autre jour, je me suis retrouvé confronté à un problème : comment tester un Web Service en envoyant une enveloppe SOAP uniquement en ligne de commande (sans soapUI). La solution, c’est CURL.
Il faut créer un fichier “req.txt” par exemple, contenant toute la requête SOAP.
curl -X POST -d @req.txt http://pipo.server.domain.com:9004/UrlWSaTester |
Exemple complet de requête SOAP
Voici un exemple de fichier req.txt :
|
En-têtes essentiels : SOAPAction et Content-Type
La plupart des services SOAP nécessitent les entêtes SOAPAction et Content-Type :
curl -X POST -H "Content-Type: text/xml; charset=utf-8" \ |
- Content-Type : text/xml - obligatoire pour SOAP 1.1 ; pour SOAP 1.2, utiliser
application/soap+xml - SOAPAction - URI identifiant l’opération ; peut être vide (
"") selon le service
Debug avec curl -v
L’option -v affiche les entêtes échangés, pratique pour comprendre ce qui se passe :
curl -v -X POST -H "Content-Type: text/xml; charset=utf-8" \ |
-v affiche la requête complète (entêtes + corps) et la réponse reçue. Pour encore plus de détail, utilisez --trace - ou --trace-ascii -.
Pretty-print de la réponse XML
La réponse brute est difficile à lire. Passez-la dans xmllint :
curl -s -X POST -H "Content-Type: text/xml; charset=utf-8" \ |
Alternative moderne : HTTPie
httpie offre une syntaxe plus naturelle et un affichage colorisé par défaut :
http POST http://pipo.server.domain.com:9004/UrlWSaTester \ |
HTTPie colorise automatiquement le XML de réponse et affiche les entêtes de manière lisible, ce qui en fait une excellente alternative à curl pour le développement quotidien.