Aprende Android: crea un cliente HTTP con HttpURLConnection

Aprende Android: crea un cliente HTTP con HttpURLConnection

http¿Estás desarrollando una aplicación para Android? ¿Necesitas que tu aplicación se comunique con algún servidor solicitándole algún servicio y gestionar la respuesta recibida? Sí ese es tu caso, puede que estas líneas te interesen.

Muchas aplicaciones necesitan solicitar algún servicio a algún servidor que provea la información solicitada por el usuario, ya sea una página web, canciones, imágenes, vídeos, etc. Para poder realizar estas peticiones, el protocolo más utilizado en Internet es el HyperText Transfer Protocol, más conocido por sus siglas “http“.

Una de las formas de implementar la comunicación cliente-servidor con la API de Android es mediante la clase HttpURLConnection, que con unas pocas líneas de código podemos hacer un cliente http totalmente configurable.

Puedes hacer una clase similar a la que muestro a continuación:

public String clienteHttp(String dir_web) throws IOException{

 Sting dir_web = " "; 
 String body = " ";

try {

 URL url = new URL(dir_web);
 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
 Integer codigoRespuesta = Integer.toString(urlConnection.getResponseCode());
 if(codigoRespuesta.equals("200")){//Vemos si es 200 OK y leemos el cuerpo del mensaje.
    body = readStream(urlConnection.getInputStream());
 }
 urlConnection.disconnect();
 } catch (MalformedURLException e) {
    body = e.toString(); //Error URL incorrecta
 } catch (SocketTimeoutException e){
    body = e.toString(); //Error: Finalizado el timeout esperando la respuesta del servidor.
 } catch (Exception e) {
    body = e.toString();//Error diferente a los anteriores.
 }
 return body;
 }

Pasos a seguir:

  1. Crea un objeto de la clase HttpURLConnection, que se conectará a la URL especificada en dir_web (por ejemplo “https://borrowbits.com”).
  2. Con el método getResponseCode() puedes ver el código de estado http devuelto, para saber si se ha podido procesar bien la petición o ha habido algún error (en el cliente o en el servidor).
  3. Si el código es “200 OK”, es que todo ha ido bien y puedes obtener la respuesta recibida con el método readStream().
    Puedes dejarte los ojos buscando este método en la web de Android Developers que no lo vas a encontrar, pero te lo ponen de ejemplo en el apartado en el que explican la clase HttpURLConnection y no especifican que esta clase te la tienes que currar tú mismo, que no existe tal cual en la API. Tranquilos, si os vale de ayuda, os pongo a continuación la que utilizo yo.
  4. Si hay algún error durante la petición, puedes gestionarlo para saber qué ha pasado (en el ejemplo sólo se contemplan dos casos, pero puede haber muchos más).
  5. También puedes configurar el objeto de la clase HttpURLConnection (al que hemos llamado urlConnection) con un gran número de métodos que nos permiten por ejemplo decidir si el método será GET (por defecto) o POST con urlConnection.setDoOutput(true), también se pueden configurar los temporizadores utilizados en la conexión, como por ejemplo el de establecimiento de conexión con urlConnection.setConnectTimeout(2000) y muchos más elementos que desees ajustar.

El método para recibir el streaming de la respuesta del servidor (o response)  que se ha utilizado en el ejemplo es el siguiente:

private String readStream(InputStream in) throws IOException{

 BufferedReader r = null;
 r = new BufferedReader(new InputStreamReader(in));
 StringBuilder total = new StringBuilder();
 String line;
 while ((line = r.readLine()) != null) {
    total.append(line);
 }
 if(r != null){
    r.close();
 }
 in.close();
 return total.toString();
 }

Ya puedes incluir esta herramienta en tu aplicación para que pueda interactuar con el resto de Internet. Cualquier mejora que quieras sugerir o comentario, ¡siempre será bienvenido!

Previous Nichos de mercado: cómo saber si tu idea es viable
Next Nuevos canales de venta para productos frescos

About author

Rafa M.
Rafa M. 51 posts

Ingeniero de Telecomunicación, apasionado de la Seguridad Informática. Le gusta estar al día en todo lo relacionado con Internet y las nuevas tecnologías.

You might also like

Desarrollo 1Comments

8 herramientas gratuitas para convertirte en un gurú de CSS3

Existen multitud de aplicaciones web que convierten a Internet en una especie de Photoshop descentralizado. Antiguamente, cuando había que implementar un diseño algo más extravagante de lo habitual, debíamos recurrir

Generales 1Comments

DrupalCamp Spain 2014

Este fín de semana la capital del Turia ha acogido a la DrupalCamp Spain 2014, a la cual fuí en calidad de ponente. No puedo dejar pasar la oportunidad de

Android 0 Comments

Mountain Bike, la mejor App para tu bici.

Ahora que está empezando el buen tiempo y para completar la operación bikini, qué mejor que salir con la bici a hacer rutas y sudar la gota gorda! Esto es

Desarrollo 1Comments

¿Cómo hacer un Servidor HTTP sencillo?

Si estás desarrollando una aplicación destinada a la gestión de contenidos o al intercambio de información entre usuarios, puede que hayas tenido la necesidad de tener uno o varios servidores

Desarrollo 1Comments

Symfonycon o deSymfony Day

Hace años que estoy asistiendo a las jornadas que más o menos, coincidiendo con el final del curso lectivo, se vienen celebrando en distintos puntos de de la geografía española,

Tutorial 6 Comments

Trucos y notas jQuery: ¿cómo acceder al contenido de un iframe?

Hoy he aprendido (¡gracias, Santi G!) un truco de programación web muy valioso para conseguir acceder a nodos y contenidos de un <iframe>. Un iframe es un elemento estándar de

Desarrollo 0 Comments

Todo está en el código fuente

Desde hace años el software se ha instalado en la vida de las personas. De manera que la vida se está tornando mas virtual con el paso del tiempo. De

Tecnologia & Ciencia 3 Comments

¿Qué hacer si me han robado el móvil?

Echas mano al bolsillo en busca de tu smartphone para ver si tienes algún mensaje nuevo y te das cuenta de que no lo llevas encima. Un sentimiento de angustia

Desarrollo 1Comments

How-to: Parsear variables JSON con PHP

Puede ocurrir que nos interese decodificar un objeto JSON en una variable PHP. A mí me ha costado un pequeño dolor de cabeza, así que os transmito la lección aprendida

8 Comments

  1. Marco
    julio 15, 18:24 Reply

    Hola. Gracias por el articulo.
    Una duda, ¿cómo envío una imagen al servidor? Se como subir texto, pero no se cómo el servidor recibe la imagen, para poder guardarla en la ruta correspondiente. Gracias de antemano.

  2. Toni
    julio 07, 20:35 Reply

    Hola, he utilizado tu código complementándolo con un Thread y funciona bien, el problema lo tengo al intentar acceder al mismo fichero alojado en el dropbox, creo que es debido al protocolo de seguridad, ya que utiliza el https, sabes como acceder a un fichero alojado en el dropbox, estoy buscando por la red peor veo muy poca información al respecto.

    Saludos.

  3. Pablo
    abril 27, 04:08 Reply

    Hola. que tal a todos? espero que bien. Yo solo escribo para agradecer el codigo fuente, ya que me ha sido de total utilidad, ademas como es solo 1 practica de coneccion y transferencia de datos minima no lo he tenido que modificar mucho para implementarlo. Bueno, muchas gracias por todo.

    • Rafa M.
      abril 29, 09:37 Reply

      Hola Pablo,

      Me alegro de que te haya sido de utilidad. Si has realizado alguna mejora, no dudes en compartirla con nosotros.
      Un abrazo

  4. ferran
    marzo 17, 19:19 Reply

    Gracias Rafa
    me parece que es lo que estaba buscando , Estoy diseñando una aplicacion (server) en una tablet i otra para moviles , tienen que recoger los datos de la server y devolverlos .
    Voy bien ?
    Gracias

    • Rafa M.
      marzo 17, 20:01 Reply

      Hola Ferrán,

      En el comentario contestando a David puse algunas webs que explican como hacer eso. Ya depende de cómo lo quieras diseñar. En el blog puedes encontrar cómo hacer un Servidor de HTTP con código Java, que atienda las peticiones HTTP, pero si quieres hacer algo más sencillo puedes usar algún servidor web existente como Apache o Tomcat.

      Saludos

  5. Rafa M.
    julio 11, 14:21 Reply

    Hola David,

    Para poder conectarte a una base de datos en un servidor remoto puedes utilizar una base de datos basada en SQL, como MySQL. Encontrarás mucha información en Internet para poder instalarla, configurarla y prepararla para las peticiones remotas. Básicamente lo que haces con tu dispositivo Android es conectarte mediante el protocolo HTTP a tu servidor (es como si te conectaras a una web, generalmente escrita en .php) que atiende las peticiones y devuelve las consultas.
    Para empezar puedes ver estos dos ejemplos en los que te detallan el proceso y te ponen ejemplos funcionales:

    http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql-and-sqlite/

    http://www.helloandroid.com/tutorials/connecting-mysql-database

    Puedes utilizar el ejemplo que he puesto en el artículo como el “medio” para enviar y recibir las respuestas a tu base de datos utilizando el protocolo HTTP.

    Si en lugar de querer utilizar una base de datos remota, prefieres utilizar una base de datos local en tu dispositivo, hay una clase diseñada para ese fin:
    http://developer.android.com/training/basics/data-storage/databases.html

    Espero que estos enlaces te sirvan de ayuda.

    ¡Un abrazo!

  6. David
    julio 05, 22:15 Reply

    Hola, gracias por el ejemplo, pero me gustaría que me puedas orientar para saber que metodo puedo utilizar para enviar datos desde mi aplicación de android y almacenarla en una base de datos que este en el servidor. De momento guardo los datos en una base de datos en el telefono, pero ahora quiero guardar esa información en una DB externa. Gracias

Leave a Reply