Invocar SOAP Web Service via Shell Script
Olá caros leitores, neste artigo apresentarei como invocar um SOAP Web Service através de um Shell Script.
No exemplo a ser apresentado, utilizaremos o Web Service de GeoLocalização por IP fornecido pela Webservicex disponível no seguinte endereço: http://www.webservicex.net/geoipservice.asmx?wsdl
O que é um Web Service?
É uma solução utilizada na integração entre sistemas e para a comunicação entre aplicações construídas em diferentes tecnologias. Com esta tecnologia é possível que novas aplicações possam interagir com aquelas que já existem e que sistemas desenvolvidos em plataformas diferentes sejam compatíveis.
cURL
O cURL é uma biblioteca utilizada via linha de comando para transferir dados através de vários protocolos.
Alguns dos protocolos suportados: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE, LDAP e LDAPS.
Utilizaremos um dos inúmeros recursos do cURL para consumir o Web Service.
Código do Shell Script
Crie o arquivo invocaWS.sh contendo o seguinte código:
#! /bin/sh
#EndPoint do WebService a ser invocado
ENDPOINT="http://www.webservicex.net/geoipservice.asmx?wsdl"
#Vericacao se o argumento foi fornecido
if [ "$1" = "" ]; then
echo "Informe o IP"
exit
fi
curl --silent \
--data \
@- \
--header 'Content-Type: application/soap+xml; charset=utf-8' \
--user-agent "" \
${ENDPOINT} <<EOF | xmllint --format -
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webservicex.net">
<soap:Header/>
<soap:Body>
<web:GetGeoIP>
<web:IPAddress>$1</web:IPAddress>
</web:GetGeoIP>
</soap:Body>
</soap:Envelope>
EOF
Testando o Script
./invocaWS.sh 200.203.123.30
Retorno do Teste
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetGeoIPResponse xmlns="http://www.webservicex.net">
<GetGeoIPResult>
<ReturnCode>1</ReturnCode>
<IP>200.203.123.30</IP>
<ReturnCodeDetails>Record Found</ReturnCodeDetails>
<CountryName>BRAZIL</CountryName>
<CountryCode>BR</CountryCode>
</GetGeoIPResult>
</GetGeoIPResponse>
</soap:Body>
</soap:Envelope>
Boa leitura a todos e espero que seja útil!

