Cliente HTTP en Java: haciendo solicitudes correctamente

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course
Here is the translated HTML content in Spanish, with all tags, code, and URLs preserved:

Cliente HTTP en Java: cómo hacer solicitudes correctamente



En el desarrollo web moderno, casi ninguna aplicación puede funcionar sin interactuar con servidores remotos. Ya sea integración con APIs REST, carga de datos o envío de formularios — la capacidad de trabajar correctamente con solicitudes HTTP en Java es una habilidad obligatoria para cualquier desarrollador. En este artículo, analizaremos cómo crear un cliente HTTP confiable en Java, considerando enfoques modernos y mejores prácticas.



¿Por qué es importante usar el cliente HTTP adecuado?



Muchos desarrolladores novatos utilizan la clase obsoleta HttpURLConnection, que apareció en Java 1.1. Aunque funciona, su API es pesada, incómoda y requiere mucho código repetitivo. A partir de Java 11, la biblioteca estándar introdujo el moderno java.net.http.HttpClient, que ofrece:

  • Soporte para HTTP/2 y WebSocket
  • Solicitudes asíncronas mediante CompletableFuture
  • Patrón Builder simple y claro
  • Manejo automático de cookies y redirecciones


Conceptos básicos para trabajar con HttpClient en Java 11+



Veamos un ejemplo básico de envío de una solicitud GET. Primero creamos una instancia del cliente, luego formamos la solicitud y la enviamos.



import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;

public class SimpleHttpClient { public static void main(String[] args) throws Exception { // Crear un cliente con tiempo de espera de conexión HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();

// Formar una solicitud GET HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .timeout(Duration.ofSeconds(30)) .header("Accept", "application/json") .GET() .build();

// Enviar la solicitud y recibir la respuesta HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println("Estado: " + response.statusCode()); System.out.println("Cuerpo de respuesta: " + response.body()); }}


Observa el uso de BodyHandlers.ofString() — es una forma conveniente de obtener el cuerpo de la respuesta como cadena. Si necesitas procesar JSON, es mejor usar BodyHandlers.ofInputStream() y pasarlo al analizador.



Envío de una solicitud POST con cuerpo



Para enviar datos al servidor (por ejemplo, al registrar un usuario), se utiliza una solicitud POST. Veamos un ejemplo con envío de JSON:



import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;

public class PostRequestExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient();

String json = """ { "name": "Iván Ivánov", "email": "ivan@example.com", "age": 30 } """;

HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/users")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .timeout(Duration.ofSeconds(15)) .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() == 201) { System.out.println("¡Usuario creado exitosamente!"); System.out.println("ID: " + response.body()); } else { System

Blogs

Book Recommendations