Diferentes formas mediante HTTP cliente-servidor recuperar informacion JSON

En la actualidad la necesidad de integrarse a diferentes plataforma es una necesidad sentida,  particularmente con el envió y recuperaron de información en formato JSON.

Hay diferentes de formas unas mas simples que otra aquí vamos a dejar algunas que son relativamente sencillas pero que cumplen a con su función.

Una de las mas simples es el uso de Curl, tiene la ventaja de que permite modelar de forma simple y dinámica la integración sin demacrada complejidad.

En estos ejemplos vamos a tomar el envío de un par de parámetros ( teléfono y mensaje) con un token de autorización para la conexión que se requiere y recuperar la respuesta desde el servidor al que nos conectamos.

CURL

En este caso implemento el modelo en un sencillos script que lanzo desde la consola . Y muy importante en este tipo de aplicaciones no olvidar siempre definir el Content-Type para que el servidor sepa que la información que le llega es tipo JSON, sino es muy probable que el servidor responda con tipo de error usualmente Http 415 indicando que el formato de los datos no es correcto.

En los ejemplo que expongo resalto este parámetro para que sea tenido en cuenta. Obserbar que los parámetros teléfono y mensaje están en formato json

Usualmente curl viene en las distribuciones linux , sino se encuentra, se puede instalar con el comando: # sudo yum install curl o # sudo dnf install curl para las distribuciones basadas en Fedora/Red Hat y aws ec2.

La instrucción 1>>/tmp/out.txt simplemente envía la salida de la información al archivo out.txt en la carpeta /tmp

curl.sh

----------------------------------------------------------------------------------------------------

curl --location 'https://api.whatzmeapi.com/own/enviar-mensaje?token=c3sbskj9fe34dx' --header "Content-Type: application/json" --request POS T  --data '{"numero" : "57310112233", "mensaje":"Hola, como estas? Enviado desde Prueba."  }'  1>>/tmp/out.txt

----------------------------------------------------------------------------------------------------

JAVASCRIPT

La data contiene la información en formato JSON , observar que en este caso los campos están separados por el carácter de escape \ y \r\n \ como separador de campo. e indicador de colillas que JSOB requiere para indiar que el campo es tipo cadena.
El mensaje de respuesta se captura en console.log(this.responseText); que se implementa como un evento.
----------------------------------------------------------------------------------------------------
<script>
var data = "{\r\n \"numero\" : \"57310112233\", \r\n \"mensaje\": \"Mensaje de prueba ? 😃\"\r\n}";

 var xhr = new XMLHttpRequest();
/                                                                                                         
  xhr.addEventListener("readystatechange", function() {
      if(this.readyState === 4) {
          console.log(this.responseText);
      }
  });

  xhr.open("POST", "https://api.whatzmeapi.com/own/enviar-mensaje?token=c3sbskj9fe34dx");
  xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  xhr.send(data);

</script>

----------------------------------------------------------------------------------------------------

El mensaje de respuesta se captura en  console.log(tresponse); que se implementa como un procedimiento ajax de jquery.
---------------------------------------------------------------------------------------------------
<script>

var data = "{\r\n \"numero\" : \"57310112233\", \r\n \"mensaje\": \"Mensaje de prueba ? 😃\"\r\n}";

  var settings = {
  "contentType": "application/json; charset=utf-8",
  "url"         : "https://api.whatzmeapi.com/own/enviar-mensaje?token=c3sbskj9fe34dx",
  "method" : "POST",
  "timeout" : 0,
  "data"         : "{\r\n \"numero\" : \"57310112233\", \r\n \"mensaje\": \"Mensaje de prueba ? 😃\"\r\n}";

};

$.ajax(settings).done(function (response) {
  console.log(response);
});

</script>

----------------------------------------------------------------------------------------------------

UNIREST bajo java  + tomcat.


Unirest puede ser descargado  con todas sus dependencias de la pagina:
Dependendo del tipo de respuesta en response eventualmente sea necesia manipular
la información para ser presentada , mediante por ejemplo json.jar o json-simple-1.1.1.jar
Recordar colocar los jar descargados en /lib de tomcat. 
La instrucción response.getBody().toString()  , consigue un objeto tipo Json , mediante la
libreria jsonSimple la convertimos a String para poder poder obtener los diferentes campos que
constituyen la respuesta.
---------------------------------------------------------------------------------------------------

import com.mashape.unirest.http.* ;
import org.json.simple.* ;

public HttpClientDTO PruebaAppSendMsg()

{
   
   String numero  = new String() ;
   String mensaje = new String() ;
   String body      = new String() ;

  String exito       = new String() ;
  String respuesta = new String() ;
  String codigo     = new String() ;
  String error        = new String() ;

  String salida = new String() ;

     try
       {
           numero  = "573101122334"                                                  ;
           mensaje = "Mensaje desde Unirest  😃"                              ;

           body   = "{"                                                                            ;
           body += " \"numero\"  : \"" + numero  + "\","                       ;
           body += " \"mensaje\" : \"" + mensaje + "\" "                       ;
           body += "}"                                                                           ;

           Unirest.setTimeouts(0, 0);

           HttpResponse<JsonNode> response = Unirest.post("https://api.whatzmeapi.com/own/enviar-mensaje?token=c3sbskj9fe3dx")
               .header("accept"      ,"application/json")
               .header("Content-type","application/json; charset=utf-8")
       .body(body)
               .asJson()                                                                            ;

          salida                =                   ;

          Object     obj     = JSONValue.parse(salida)                          ;
          JSONObject jsonObject = (JSONObject) obj                        ;

          exito         = " " + (boolean) jsonObject.get("exito")              ;
          codigo      = " " + (long) jsonObject.get("codigo")                 ;
          respuesta  = (String) jsonObject.get("respuesta")                   ;
          error         = (String) jsonObject.get("mensajeError")            ;

          System.out.println("Mensaje datos : exito: " + exito + " codigo " + codigo + " respuesta "  + respuesta)               ;

           return httpClientC;
       }
     catch (Exception e)
       {
         System.out.println("Error Whatsapp : " + e.toString())                ;
         return (httpClientC)                                                  ;
      }
   }




----------------------------------------------------------------------------------------------------

HttpClient



Unirest puede ser descargado  con todas sus dependencias de la pagina:
Dependendo del tipo de respuesta en response eventualmente sea necesia manipular
la información para ser presentada , mediante por ejemplo json.jar o json-simple-1.1.1.jar
Recordar colocar los jar descargados en /lib de tomcat. 
Para HttpClient se creo una función adicional llamada public String UTF8_Whatsapp(String entrada)
{ que sirve para acondicioanr las cadena recibida desde el servidor para permitir que kson pueda
codificar de forma correcta los campos, ya que en ocaciones los careacters especialñes tildados
caracteres separadores evitan que json pueda funcionar correctamente.
La libreria httpClient se puede descargar desde el sitio:
https://jar-download.com/artifacts/org.apache.httpcomponents/httpclient/4.5.6/source-code
---------------------------------------------------------------------------------------------------

import com.mashape.unirest.http.* ;
import org.json.simple.* ;

import org.apache.http.HttpEntity;

import org.apache.http.entity.StringEntity;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils ;

import java.nio.charset.StandardCharsets ;


public HttpClientDTO WhatsAppSendMsg()


{


  HttpClientDTO httpClientC = new HttpClientDTO() ;


  String salida = new String() ;


  String numero = new String() ;

  String mensaje = new String() ;


  String exito = new String() ;

  String respuesta = new String() ;

  String codigo = new String() ;

  String error = new String() ;


try

{


  String url ="https://api.whatzmeapi.com/own/enviar-mensaje?token=c3sbskj9fe34dx";


  CloseableHttpClient httpClient = HttpClients.createDefault() ;

  HttpPost httpPost = new HttpPost(url) ;  

  

  httpPost.setHeader("User-Agent" , "Mozilla/5.0") ;
  httpPost.setHeader("Accept" , "application/json") ;
  httpPost.setHeader("Content-type" , "application/json; charset=utf-8") ;
  httpPost.setHeader("X-Requested-With", "XMLHttpRequest"); // mimics a browser REST request

//El caracter de escape de comillas es necesario porque json requiere que los titulos y las variables sean //tipo String.

   numero = "573101122334" ;  
   mensaje = "Hola mundo. 😃" ;

  String urlParameters = "{ " ;
  urlParameters += "\"numero\":\"" + numero + "\","                              ;
  urlParameters += "\"mensaje\":\"" + mensaje + "\" "                            ;
  urlParameters += " }"                                                                            ;

  StringEntity postParams = new StringEntity(urlParameters)               ;
  httpPost.setEntity(postParams)                                                             ;

  CloseableHttpResponse httpResponse = httpClient.execute(httpPost) ;

  int status = httpResponse.getStatusLine().getStatusCode() ;

if (status >= 200 && status < 300)
{
    HttpEntity datosRecibidos = httpResponse.getEntity() ;
    if (datosRecibidos == null)
      {
        httpClientC.setHttpClientMensaje("Error, conexion integracion") ;
      }
    else
      {

        salida = EntityUtils.toString(datosRecibidos,"UTF-8") ;
        salida = UTF8_Whatsapp(salida) ;
        httpClientC.setHttpClientMensaje("Respuesta:" + respuesta + " Datos:" + salida) ;

        Object obj = JSONValue.parse(salida) ;
        JSONObject jsonObject = (JSONObject) obj ;

        exito = " " + (boolean) jsonObject.get("exito") ;
        codigo = " " + (long) jsonObject.get("codigo") ;
        respuesta = (String) jsonObject.get("respuesta") ;
        error = (String) jsonObject.get("mensajeError") ;

        httpClientC.setHttpClientMensaje(respuesta) ;

       }
    }
}
else
{
   httpClientC.setHttpClientMensaje("Error, integracion Whatsapp respuesta:" + respuesta);
}

   System.out.println(" ") ;

   System.out.println("**********************************") ;  
   System.out.println("urlParametros:" + urlParameters) ;
   System.out.println("postParametros:" + postParams) ;
   System.out.println("url:" + url) ;
   System.out.println("post:" + httpPost) ;
   System.out.println("salida:" + salida) ;
   System.out.println("-----------------------------------") ;  
   System.out.println("Exito:" + exito) ;
   System.out.println("Respuesta:" + respuesta) ;
   System.out.println("Codigo:" + codigo) ;

   System.out.println("Error:" + error) ;

   System.out.println("**********************************") ;

   httpClient.close() ;
   return (httpClientC) ;
}
catch(Exception e)
   {
    System.out.println("Error, Integracion Whatsapp : " + e.toString()) ;
    httpClientC.setHttpClientMensaje("Error,integracion " + e.toString()) ;
    return (httpClientC) ;

  }
}

public String UTF8_Whatsapp(String entrada)
{

/*

Se creo estw procedimiento para el manejo de vocales tildadas y la ñ
porque el json de Whatsapp, no respondio a varios
de los modelos de conversión UTF-8 de java tales como:

 String salida = EntityUtils.toString(datosRecibidos,"UTF-16") ; 
 byte[] bytes = salida.getBytes("UTF-16") ;
 String salida1= new String(bytes, "UTF-16") ;

  //Observar abajo los caracteres para colocar el caracters de escape por
  //Ejemplo para \u0063\u00a1 = á

*/

  String salida=entrada ;
  salida=salida.replaceAll("\\\\u00c3\\\\u0081", "&Aacute;") ;
  salida=salida.replaceAll("\\\\u00c3\\\\u00a1", "&aacute;") ;

 salida=salida.replaceAll("\\\\u00c3\\\\u0089", "&Eacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u00a9", "&eacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u008d", "&Iacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u00ad", "&iacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u0093", "&Oacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u00b3", "&oacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u009a", "&Uacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u00ba", "&uacute;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u0091", "&Ntilde;") ;
 salida=salida.replaceAll("\\\\u00c3\\\\u00b1", "&ntilde;") ;

return (salida) ;

}
}








Comentarios

Entradas populares