Cliente HTTP para Java: revisión de las mejores bibliotecas (Java 11, Apache, OkHttp, Retrofit)

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

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                    

Recommendations