Realizando peticiones soap a un web service con curl en bash

Publicado el 14 noviembre 2014 por Dbigcloud @dbigcloud

Hoy os voy a enseñar como atacar a un web service desde bash realizando una petición SOAP, que no es ni mas ni menos que la comunicación entre dos objetos por medio de intercambio de datos XML. ¿Para que es util hacer esto por consola? Por ejemplo para sistemas de monitorización que necesiten chequear el estado de un web service.

Por ejemplo vamos a acceder a algun web service publico del repositorio http://www.service-repository.com/ para mostraros el ejemplo, vay a elegir el siguiente: http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL y voy a usar uno de los metodos que hay por ejemplo: GetWeatherInformationSoapIn el cual nos va a mostrar en forma de xml un ejemplo del estado del tiempo

http://www.service-repository.com/operation/operations?id=58


Lo primero de todo va a ser crear nuestro fichero xml para realizar la petición, en el cual le tendremos que indicar la API de la que va a extraer los datos:

http://schemas.xmlsoap.org/soap/envelope/">
<s11:Body>
<ns1:GetWeatherInformation xmlns:ns1="">">http://ws.cdyne.com/WeatherWS/"/>
</s11:Body>
</s11:Envelope>

Ahora ya podemos realizar la petición a través de curl 

/usr/bin/curl --connect-timeout 60 -m 60 -s -S -L --header "Content-Type: text/xml;charset=UTF-8" --data @soap.xml http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL | xmllint --forma

De esta forma obtenemos el listado de ciudades y el tiempo en cada una de ellas.

Con este ejemplo ya podéis usar curl en bash para atacar a un web service realizando una petición SOAP. Con el repositorio que os he pasado podeis realizar diversas pruebas, os invito a que realiceis alguna y publicamos aquí las vuestras.