Solicitud SOAP desde línea de comandos usando curl

En la actualidad la mayoría de los servicios web están implementados bajo arquitecturas REST o SOAP, puede existir la posibilidad de que se necesite hacer un request desde su línea de comando sin la necesidad de instalar herramientas como SOAPUI. Las herramientas son realmente útiles, pero a veces no se pueden usar herramientas, para este caso usaremos el comando curl para hacer la solicitud, si no lo tiene instalado, use el siguiente comando.

Distribuciones Fedora

sudo yum install curl

Distribuciones Debian

sudo apt-get install curl

curl-soap

Paso 1:

Vamos a crear la solicitud SOAP, para ello agregaremos un archivo xml con los parámetros de invocación al servicio web, el archivo se llamara request.xml

<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:v1="http://schemas.conversesolutions.com/xsd/dmticta/v1">
    <soapenv:Header/>
    <soapenv:Body>
        <v1:GetVehicleLimitedInfo>
            <v1:vehicleNo>?</v1:vehicleNo>
            <v1:phoneNo>?</v1:phoneNo>
        </v1:GetVehicleLimitedInfo>
    </soapenv:Body>
</soapenv:Envelope>

Paso 2:

curl -H "Content-Type: text/xml" --header "SOAPAction: action_you_want_to_call" --data @file_name url_of_the_soap_web_service_endpoint
curl -H "Content-Type: text/xml" --header "SOAPAction: GetVehicleLimitedInfo" --data @request.xml http://demo.com/recurso?WSDL

La solicitud al servicio web daria la siguiente respuesta:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <GetVehicleLimitedInfoResponse
            xmlns="http://schemas.conversesolutions.com/xsd/dmticta/v1">
            <return>
                <ResponseMessage xsi:nil="true" />
                <ErrorCode xsi:nil="true" />
                <RequestId>1411050004</RequestId>
                <TransactionCharge>200</TransactionCharge>
                <VehicleNumber>GP-XXYY</VehicleNumber>
                <AbsoluteOwner />
                <EngineNo>4G13-YX59ZC</EngineNo>
                <ClassOfVehicle>MOTOR CAR</ClassOfVehicle>
                <Make>MITSUBISHI</Make>
                <Model>LANCER</Model>
                <YearOfManufacture>1999</YearOfManufacture>
                <NoOfSpecialConditions>0</NoOfSpecialConditions>
                <SpecialConditions xsi:nil="true" />
            </return>
        </GetVehicleLimitedInfoResponse>
    </soap:Body>
</soap:Envelope>

Se puede agregar, después de url_of_the_soap_web_service_endpoint, | xmllint –format – para que la respuesta a la solicitud sea por consola.

Share on FacebookTweet about this on TwitterShare on Google+

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *