Cliente HTTP para Java: revisión de las mejores bibliotecas
En el desarrollo moderno de Java, prácticamente ninguna aplicación prescinde de la interacción a través del protocolo HTTP. El envío de solicitudes a APIs REST, la descarga de archivos, el trabajo con microservicios, todo esto requiere un cliente HTTP confiable y conveniente. En este artículo, analizaremos las cuatro bibliotecas más populares para trabajar con HTTP en Java: el estándar HttpClient (Java 11+), Apache HttpClient, OkHttp y Retrofit. Conocerá sus características, puntos fuertes y obtendrá ejemplos prácticos de código.
1. Java 11 HttpClient (java.net.http)
A partir de Java 11, se agregó a la biblioteca estándar un cliente HTTP moderno, diseñado para reemplazar el obsoleto HttpURLConnection. Admite HTTP/2, WebSocket, solicitudes asíncronas y flujos reactivos.
Ventajas:
- No requiere dependencias adicionales, está integrado en el JDK.
- Soporte para HTTP/2 y actualización automática del protocolo.
- API conveniente con llamadas síncronas y asíncronas.
- Soporte integrado para manejo de cookies, redirecciones y autenticación.
Ejemplo de solicitud GET síncrona:
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class Java11HttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1")) .GET() .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Status code: " + response.statusCode()); System.out.println("Body: " + response.body()); }}Ejemplo de solicitud POST asíncrona:
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpRequest.BodyPublishers;import java.util.concurrent.CompletableFuture;
public class AsyncPostExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://jsonplaceholder.typicode.com/posts")) .header("Content-Type", "application/json") .POST(BodyPublishers.ofString("{\\"title\\":\\"foo\\",\\"body\\":\\"bar\\",\\"userId\\":1}")) .build();
CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); future.thenAccept(response -> { System.out.println("Status: " + response.statusCode()); System.out.println("Body: " + response.body()); }).join(); }}2. Apache HttpClient
La biblioteca clásica de Apache, que durante mucho tiempo fue el estándar de facto. La última versión (5.x) recibió mejoras significativas: soporte para HTTP/2, manejo mejorado del pool de conexiones y una configuración más flexible.
Ventajas:
- Máxima flexibilidad y ajuste fino (timeouts, interceptores, almacenamiento en caché).
- Estabilidad probada a lo largo del tiempo.
- Soporte para varios esquemas de autenticación (Basic, Digest, NTLM).
- Buena integración con proxies y SSL.
Ejemplo de solicitud GET con Apache HttpClient 5:
import org.apache.hc.client5.http.classic.methods.HttpGet;import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;import org.apache.hc.client5.http.impl.classic.Clos También en la biblioteca
openapi-typescript para TypeScript: guía completa con ejemplos
Trabajo con XML en TypeScript: bibliotecas para analizar y crear XML
Trabajo con Markdown en Node.js: bibliotecas y herramientas para conversión