Hoy os voy a explicar 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 útil hacer esto por consola? Por ejemplo para sistemas de monitorización que necesiten chequear el estado del Webservice.
Por ejemplo vamos a acceder a algún web service publico del repositorio https://www.membrane-soa.org/service-proxy-doc/ para mostraros el ejemplo, elijo el siguiente: https://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL y voy a usar uno de los métodos que hay por ejemplo: GetWeatherInformationSoapIn el cual nos va a mostrar en forma de xml un ejemplo del estado del tiempo:
https://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:
<s11:Envelope xmlns:s11="https://schemas.xmlsoap.org/soap/envelope/">
<s11:Body>
<ns1:GetWeatherInformation xmlns:ns1="https://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 https://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 webservice realizando una petición SOAP. Con el repositorio que os he pasado podéis realizar diversas pruebas, os invito a que realicéis alguna y publicamos aquí las vuestras.
Otros enlaces a Webservices para practicar.
- https://www.gcomputer.net/webservices/dilbert.asmx?op=DailyDilbert
- https://www.dataaccess.com/webservicesserver/NumberConversion.wso?op=NumberToWords
- https://www.dataaccess.com/webservicesserver/NumberConversion.wso?op=NumberToDollars
Compártelo:
Comentarios
information caducada.
https://ws.cdyne.com/WeatherWS/
error conection.