Invocando webservices vía Telnet

Vamos a ver cómo podemos invocar un webservice mediante una conexión telnet al servidor donde esté desplegado. Además, veremos cómo automatizar este proceso en un script bash para así poder crear servicios autónomos en el SO sin necesidad de interaccionar con el usuario.

Telnet es el nombre dado a un protocolo web mediante el cual se pueden lanzar comandos en una máquina remota. Deben existir tanto el cliente en la máquina que realice las peticiones como el servidor en la máquina que va a recibir las peticiones. No se recomienda su uso en ambientes poco seguros ya que la conexión no utiliza ningún tipo de cifrado, para ello se debe utilizar el protocolo SSH.

Conexión al servidor

      telnet [ip ó hostname] [puerto]
 

Para nuestro caso, los webservices están publicados en un servidor Tomcat en la ruta: http://myserver:8080/axis/services por lo tanto deberíamos lanzar el comando:

       telnet myserver 8080

Para finalizar la sesión, por lo general bastará con:

      pulsar Ctrl+
      quit (enter)

Obtención del fichero de descripción (WSDL)

Al igual que desde el navegador podemos obtener el .wsdl del webservice elegido, podría sernos de utilidad obtener este desde la consola por ejemplo para volcarlo a un fichero local. Para ello utilizaremos el comando GET

      telnet myserver 8080   (enter)
      GET /axis/services/myService?wsdl   (enter)

Generando la petición al webservice

Para obtener la petición que se debe lanzar al servidor, el método más cómodo es ejecutar la petición en primer lugar mediante SoapUI. Cargaremos el cliente de webservice, completando los parámetros necesarios si los hubiera, configurando protocolos de seguridad, etc. Una vez introducidos los datos ejecutaremos un sniffer (Wireshark) y capturaremos los paquetes TCP con destino al puerto 8080 al lanzar el webservice.

1. Desplegamos el paquete  POST /axis/services/myService?wsdl HTTP/1.1

2. Copiamos el esquema <soapenv:Evelope>   (copy > bytes [printable text only])

3. Editamos el texto copiado eliminando saltos de línea y espacios en blanco entre etiquetas.

Envío de peticiones al servidor

Para enviar peticiones al servidor desde la consola Telnet se utilizará el comando POST. A este se le pasarán una serie de parámetros para indicar qué método se quiere invocar, formato de la petición, host, longitud de la petición, etc.

Se detalla como:

POST /axis/services/myService?wsdl HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction:
User-Agent: Jakarta Commons-HttpClient/3.1
Host: myServer
Content-Length: 1033

Tener en cuenta, que se deben modificar, al menos, los datos:

– POST: dirección del wsdl

– Host: dirección de la máquina donde está publicado el webservice

– Content-Length: número de caractéres del mensaje xml copiado anteriormente

Una vez lanzado el comando POST la consola esperará al mensaje que realmente representa la petición. Es ahora cuando se le pasará el xml copiado anteriormente desde Wireshark.

Apunte

Para automatizar este proceso, es útil volcar toda la petición a un fichero de texto plano y ejecutar el telnet dentro de un script similar a este:

#! /bin/bash
(
  while read line
    do
    echo  "$line"
    sleep 1;
    done < wsdl.dat
) | telnet localhost 8080 > telnet.log

Espero que haya sido de ayuda para aquel que lo necesite.

2 thoughts on “Invocando webservices vía Telnet

  1. Pingback: Resumen 2012 | tUpaKamaRu

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s