En este tema, aprenderemos sobre cómo trabajar con URLs y la clase HttpURLConnection en Java para realizar solicitudes HTTP. Este conocimiento es fundamental para desarrollar aplicaciones que interactúan con servicios web y APIs.
Conceptos Clave
-
URL (Uniform Resource Locator): Es una referencia a un recurso en la web. Una URL tiene la siguiente estructura:
protocolo://host:puerto/ruta?parametros- Protocolo: El esquema de la URL, como
http,https,ftp, etc. - Host: El nombre del dominio o la dirección IP del servidor.
- Puerto: El puerto en el servidor al que se accede (opcional, por defecto es 80 para HTTP y 443 para HTTPS).
- Ruta: La ruta al recurso en el servidor.
- Parámetros: Los parámetros de consulta (opcional).
- Protocolo: El esquema de la URL, como
-
HttpURLConnection: Es una clase en Java que permite realizar solicitudes HTTP y manejar las respuestas. Es parte del paquete
java.net.
Ejemplo Práctico
Paso 1: Crear una URL
Primero, creamos una instancia de la clase URL con la URL del recurso al que queremos acceder.
import java.net.URL;
public class URLExample {
public static void main(String[] args) {
try {
URL url = new URL("https://jsonplaceholder.typicode.com/posts/1");
System.out.println("Protocolo: " + url.getProtocol());
System.out.println("Host: " + url.getHost());
System.out.println("Ruta: " + url.getPath());
} catch (Exception e) {
e.printStackTrace();
}
}
}Paso 2: Establecer una Conexión HTTP
Usamos la clase HttpURLConnection para abrir una conexión a la URL y realizar una solicitud HTTP.
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConnectionExample {
public static void main(String[] args) {
try {
URL url = new URL("https://jsonplaceholder.typicode.com/posts/1");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
System.out.println("Código de respuesta: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) {
// Leer la respuesta
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Imprimir la respuesta
System.out.println("Respuesta: " + response.toString());
} else {
System.out.println("Solicitud fallida");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}Explicación del Código
-
Crear la URL:
URL url = new URL("https://jsonplaceholder.typicode.com/posts/1"); -
Abrir la conexión:
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); -
Configurar la solicitud:
connection.setRequestMethod("GET"); -
Obtener el código de respuesta:
int responseCode = connection.getResponseCode(); -
Leer la respuesta:
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); -
Imprimir la respuesta:
System.out.println("Respuesta: " + response.toString());
Ejercicio Práctico
Ejercicio 1: Realizar una Solicitud POST
Modifica el ejemplo anterior para realizar una solicitud POST a la URL https://jsonplaceholder.typicode.com/posts con el siguiente cuerpo JSON:
Solución
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpPostExample {
public static void main(String[] args) {
try {
URL url = new URL("https://jsonplaceholder.typicode.com/posts");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);
String jsonInputString = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}";
try(OutputStream os = connection.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
int responseCode = connection.getResponseCode();
System.out.println("Código de respuesta: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_CREATED) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Respuesta: " + response.toString());
} else {
System.out.println("Solicitud fallida");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}Explicación del Código
-
Configurar la solicitud POST:
connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json; utf-8"); connection.setRequestProperty("Accept", "application/json"); connection.setDoOutput(true); -
Enviar el cuerpo de la solicitud:
String jsonInputString = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}"; try(OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } -
Leer la respuesta:
if (responseCode == HttpURLConnection.HTTP_CREATED) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Respuesta: " + response.toString()); } else { System.out.println("Solicitud fallida"); }
Conclusión
En este tema, hemos aprendido cómo trabajar con URLs y la clase HttpURLConnection en Java para realizar solicitudes HTTP. Hemos cubierto tanto solicitudes GET como POST, y cómo manejar las respuestas. Este conocimiento es esencial para interactuar con servicios web y APIs en tus aplicaciones Java.
En el siguiente módulo, exploraremos temas más avanzados relacionados con redes, como el uso de ServerSocket y DatagramSocket.
Curso de Programación en Java
Módulo 1: Introducción a Java
- Introducción a Java
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Operadores
Módulo 2: Flujo de Control
Módulo 3: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Métodos
- Constructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Programación Orientada a Objetos Avanzada
Módulo 5: Estructuras de Datos y Colecciones
Módulo 6: Manejo de Excepciones
- Introducción a las Excepciones
- Bloque Try-Catch
- Throw y Throws
- Excepciones Personalizadas
- Bloque Finally
Módulo 7: Entrada/Salida de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Flujos de Archivos
- BufferedReader y BufferedWriter
- Serialización
Módulo 8: Multihilo y Concurrencia
- Introducción al Multihilo
- Creación de Hilos
- Ciclo de Vida de un Hilo
- Sincronización
- Utilidades de Concurrencia
Módulo 9: Redes
- Introducción a las Redes
- Sockets
- ServerSocket
- DatagramSocket y DatagramPacket
- URL y HttpURLConnection
