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
----------------------------------------------------------------------------------------------------
El mensaje de respuesta se captura en console.log(this.responseText); que se implementa como un evento.
UNIREST bajo java + tomcat.
import com.mashape.unirest.http.* ;
import org.json.simple.* ;
{
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() ;
----------------------------------------------------------------------------------------------------
HttpClient
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", "Á") ;
salida=salida.replaceAll("\\\\u00c3\\\\u00a1", "á") ;
salida=salida.replaceAll("\\\\u00c3\\\\u0089", "É") ;
salida=salida.replaceAll("\\\\u00c3\\\\u00a9", "é") ;
salida=salida.replaceAll("\\\\u00c3\\\\u008d", "Í") ;
salida=salida.replaceAll("\\\\u00c3\\\\u00ad", "í") ;
salida=salida.replaceAll("\\\\u00c3\\\\u0093", "Ó") ;
salida=salida.replaceAll("\\\\u00c3\\\\u00b3", "ó") ;
salida=salida.replaceAll("\\\\u00c3\\\\u009a", "Ú") ;
salida=salida.replaceAll("\\\\u00c3\\\\u00ba", "ú") ;
salida=salida.replaceAll("\\\\u00c3\\\\u0091", "Ñ") ;
salida=salida.replaceAll("\\\\u00c3\\\\u00b1", "ñ") ;
return (salida) ;
}
}
Comentarios
Publicar un comentario