Obtener respuesta de URL con Java y HttpUrlConnection
En este tutorial vamos a ver cómo hacer una petición HTTP de tipo GET con Java. Es decir, obtener la respuesta HTTP (ya sea HTML, JSON, texto, etcétera) que se obtiene al visitar una URL.
No vamos a usar ninguna librería externa ni paquetes de terceros, solamente URL, HttpUrlConnection y algunos búferes.
Esto será simple pero a partir de esto podremos hacer peticiones más grandes.
Imports necesarios
Vamos a importar los siguientes paquetes que ya están en la “librería estándar” de Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
Con eso tenemos.
Lo que vamos a consumir
Para no tener que configurar un servidor ni esas cosas (eso será parte de otro post) vamos a consumir la API de JSONPlaceholder.
Eso regresa un JSON que por el momento no vamos a parsear para efectos de simplicidad, pero vamos a imprimirlo.
Actualización: si quieres puedes ver cómo parsear el JSON recibido en este otro post.
Configurando entorno
Si no tienes Java, mira cómo instalarlo aquí. También recomiendo instalar NetBeans para que tu desarrollo en Java sea más fácil.
Función para hacer una petición GET en Java
La función que vamos a ver recibe una cadena, que es la ruta absoluta o URL que vamos a consumir. Está definida para lanzar una excepción, por lo que al llamarla debemos encerrarla en un try catch.
public static String peticionHttpGet(String urlParaVisitar) throws Exception {
// Esto es lo que vamos a devolver
StringBuilder resultado = new StringBuilder();
// Crear un objeto de tipo URL
URL url = new URL(urlParaVisitar);
// Abrir la conexión e indicar que será de tipo GET
HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
conexion.setRequestMethod("GET");
// Búferes para leer
BufferedReader rd = new BufferedReader(new InputStreamReader(conexion.getInputStream()));
String linea;
// Mientras el BufferedReader se pueda leer, agregar contenido a resultado
while ((linea = rd.readLine()) != null) {
resultado.append(linea);
}
// Cerrar el BufferedReader
rd.close();
// Regresar resultado, pero como cadena, no como StringBuilder
return resultado.toString();
}
Regresa una cadena que será la respuesta HTTP. Podemos llamarla desde cualquier lugar o modificarla de acuerdo a nuestras necesidades.
Ejemplo de petición HTTP GET en Java
Ahora sí veamos el ejemplo en donde consumimos la API de JSONPlaceholder. La URL será un “todo” es decir un quehacer o cosa pendiente, la URL es: https://jsonplaceholder.typicode.com/todos/1
Con el navegador, la respuesta es:
Ahora veamos este código que hace la petición con todo y try catch:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
class Main {
public static void main(String[] args) {
String url = "https://jsonplaceholder.typicode.com/todos/1";
String respuesta = "";
try {
respuesta = peticionHttpGet(url);
System.out.println("La respuesta es:\n" + respuesta);
} catch (Exception e) {
// Manejar excepción
e.printStackTrace();
}
}
public static String peticionHttpGet(String urlParaVisitar) throws Exception {
// Esto es lo que vamos a devolver
StringBuilder resultado = new StringBuilder();
// Crear un objeto de tipo URL
URL url = new URL(urlParaVisitar);
// Abrir la conexión e indicar que será de tipo GET
HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
conexion.setRequestMethod("GET");
// Búferes para leer
BufferedReader rd = new BufferedReader(new InputStreamReader(conexion.getInputStream()));
String linea;
// Mientras el BufferedReader se pueda leer, agregar contenido a resultado
while ((linea = rd.readLine()) != null) {
resultado.append(linea);
}
// Cerrar el BufferedReader
rd.close();
// Regresar resultado, pero como cadena, no como StringBuilder
return resultado.toString();
}
}
Así es como consumimos un JSON a través de una URL con Java, en los siguientes posts veremos cómo parsear este JSON.
Al ejecutar este código, la salida es:
Con eso sentamos las bases para consumir cualquier servicio web ya sea programado por nosotros o para consumir la API de cualquier otro sitio.
Te invito a leer más sobre Java o el consumo de API’s.
estoy tratando de recuperar como vos lo implementaste perfectamente, desde un login el mail y la contraseña ingresados, lo debo hacer utilizando Json, Ajax con Java… La verdad no me doy cuenta que debo cambiar o como debo hacerlo…. desde los archivos html uso javascript….. Agradeceria me puedas ayudar. Gracias.
Hola. En este caso sería una petición POST para enviar los valores en el cuerpo de la respuesta
Saludos 🙂
necesito enviar una respuesta a la api.
Me funciona excelente tutorial!! Para el caso de usar una url con localhost como seria?
Como sería con otra URL??
Simplemente hay que cambiar la variable: https://gist.github.com/parzibyte/88e79d6ee511253479e68e1e3a6d1957#file-main-java-L7
Un saludo
Excelente! Fácil de leer e implementar