enviar y recibir datos de un servidor sin Webservice
Enviar y recibir datos de un servidor sin Webservice.
Eventualmente puede ocurrir que se necesite conseguir datos de una pagina que tiene ciertos datos que puedan ser de nuestro interés, como pueda ser una taza de cambio, la temperatura, la validación de algún parámetro como una documento en una institución oficial. pero des afortunadamente no tenemos acceso a sus webservice.
O en otro escenario queremos hacer una comunicación con otros sistema pero el mismo no tiene webservice o no desean o puedan configurarlo, que hacer entonces ?
Para los usuarios de Java y Tomcat en el cliente , por lo menos hasta donde conozco existe una solución bastante sencilla que permite conseguir y enviar datos de la forma convencional de pasar los parámetros por GET y POS y esperar la respuesta en una muy sencilla pagina html.
La utilidad se llama httpclient , proyecto desarrollado por la organización Apache en siguiente link https://hc.apache.org/httpcomponents-client-5.1.x/ se puede descargar el código de instalación y manuales de funcionamiento, amén de los ejemplos sencillos y algunos no tan sencillos. En el caso especifico de tomcat las librerías se encuentran por defecto en /tomcat/lib/httpclient.jar o equivalente dependiendo de la versón de tomcat que se esté usando
En resumen la cosa es como sigue.
Se genera una URL, con la dirección y los parámetros necesarios a trasmitir y el sistema genera un servicio que recibe en una cadena la respuesta enviada desde el sitio al cual se esta interrogando, todo el procedimiento se efectúa al lado del cliente y toda la pagina se almacena en una variable local que posteriormente se puede analizar para sacar de allí la información que se requiera.
Vamos a ver un ejemplo mas con animo de ilustrar el punto que otra cosa
En el siguiente ejemplo vamos a ingresar a un sitio que nos pide el usuario y la contraseña y con un documento cédula que eventualmente sirve para extraer información de interés que en este caso el servidor devuelve una cadena con: Hola Mundo Cedula
<%!
static public String HttpClient(String gUsuario,
String gContrasena,
String gCedula)
{
/*
Cuerpo guarda la información devuelta por la pagina consultada,
Usando el método replaceAll de java limpia la cadena
devuelta por el httpClient
*/
String cuerpo = " " ;
String url = "" ;
String info = new String() ;
url = "http://www.paginadeinters.com/ventas_pendientes.php";
url += "?usuario=" + gUsuario ;
url += "&contrasena=" + gContrasena ;
url += "&cedula=" + gCedula ;
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
/* Establece comunicación con el servidor vía httpclient en la url indicada */
HttpGet httpGet = new HttpGet(url) ;
/* Recibimos la totalidad de la pagina consultada en la variable cuerpo */
ResponseHandler<String> responseHandler = new BasicResponseHandler();
cuerpo = httpclient.execute(httpGet, responseHandler).toString() ;
httpGet.releaseConnection() ;
/* en el ejemplo revisamos si la pagina nos devolvió un parámetro esperado
en este caso el mismo documento (cédula de consulta) de lo contrario
asumimos que la consulta fallo
*/
if (cuerpo,indexOf(Cedula) == 0)
{
return ("Error consulta no es correcta") ;
}
/* Este ejemplo muy particular asume que el servidor sirve los datos en una
cadena conformada por un arreglo php.
Ilustro aquí esa característica simplemente para indicar que el servidor puede
estar en cualquier lenguaje
la pagina viene servida así:
Cabecera (etiquetas como <html><body> etc.)
cuerpo (informacion de interés)
Tail (etiquetas como </body></html> etc.)
Como saben los amigos de php, este tipo de arreglos empieza por la variable
Array
Usamos esto para eliminar toda la cabecera el contenido de la pagina que no nos
sirve para nada
cadena,indexOf(token) : consigue la posición de un carácter en una variable
Substr(cadena,posición,longitud) : extrae una porción de una cadena en una cadena de información de una posición dada y con una extensión definida por el usuario
*/
int posicion = cuerpo.indexoFf("Array") ;//Elimina las etiquetas cabecera de la pagina html
int longitud = cuerpo.length() ;
cuerpo = cuerpo,substring(posicion,longitud-posicion) ;
/*
Un uso exhaustivo de el comando replaceAll() permite eliminar los caracteres que no me son útiles generando una cadena simple, separadas por comas de la información de interés ya que en php se generan una cadena del tipo Array ([0] = > Hola [1]=> Mundo [3]=>cédula
y necesito eliminar todo lo que sea distinto a hola mundo
*/
cuerpo = cuerpo.replaceAll("Array","") ;
cuerpo = cuerpo.replaceAll("[()]","") ;
cuerpo = cuerpo.replaceAll("[\\[]","") ;
cuerpo = cuerpo.replaceAll("[\\]]","") ;
cuerpo = cuerpo.replaceAll(" 0 ","") ;
cuerpo = cuerpo.replaceAll("=>","") ;
/*
Elimina los caracteres finales de la pagina, dejando solo la información de interés en la variable cuerpo
*/
cuerpo = cuerpo.replaceAll("[\\/]","") ;
cuerpo = cuerpo.replaceAll("[\\<]","") ;
cuerpo = cuerpo.replaceAll("[\\>]","") ;
cuerpo = cuerpo.replaceAll("body","") ;
cuerpo = cuerpo.replaceAll("html","") ;
cuerpo = cuerpo.trim() ;
}
catch (Exception e)
{
cuerpo = "Error " + e.toString() ;
}
return cuerpo ;
}
/*
La cadena queda como:
cuerpo = Hola,Mundo,cedula
*/
Existe desde luego un nutrido set de comando asociados a httpclient que permiten separar la cabecera , el cuerpo y el tail de la pagina de forma directa, verificar la conexión y la respuesta de la pagina, pero aquí lo que se enfatiza es que de una forma relativamente sencilla en cuanto a la conexión en si misma, y una manipulación de una cadena con comando básicos para manejos de cadenas se puede lograr un solución, cuando un webservice no está a la mano.
Comentarios
Publicar un comentario