Cliente HTTP para Java: mejores bibliotecas para trabajar con HTTP
El desarrollo moderno en Java rara vez prescinde de la interacción con servidores remotos mediante el protocolo HTTP. Ya sea para llamar a una API REST, descargar archivos o integrarse con microservicios, el desarrollador necesita un cliente HTTP confiable y conveniente. En este artículo, analizaremos tres bibliotecas líderes para Java: OkHttp, Apache HttpClient y el Java HttpClient integrado (a partir de Java 11). Conocerás sus características, verás ejemplos de código y entenderás qué biblioteca elegir para tu proyecto.
1. Java HttpClient (integrado, Java 11+)
A partir de Java 11, la biblioteca estándar incluye un cliente HTTP moderno que reemplaza al obsoleto HttpURLConnection. Soporta HTTP/2, WebSocket, solicitudes asíncronas y flujos reactivos.
Características:
- No requiere dependencias adicionales: viene incluido en el JDK.
- Soporte para llamadas síncronas (
send) y asíncronas (sendAsync). - Trabaja con HTTP/2 y degradación automática a HTTP/1.1.
- Soporte integrado para WebSocket.
- Manejo conveniente del cuerpo de la solicitud mediante
BodyPublishersy de la respuesta medianteBodyHandlers.
Ejemplo: solicitud GET
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
public class JavaHttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.github.com/users/octocat")) .GET() .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println("Estado: " + response.statusCode()); System.out.println("Cuerpo: " + response.body()); }}Ejemplo: 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.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(HttpRequest.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("Estado: " + response.statusCode()); System.out.println("Respuesta: " + response.body()); }).join(); }}2. OkHttp (Square)
OkHttp es una de las bibliotecas más populares para Android y Java. Es conocida por su alto rendimiento, gestión automática de conexiones y soporte para HTTP/2 y SPDY. OkHttp se utiliza internamente en Retrofit y Picasso.
Características:
- Soporte para HTTP/2 y multiplexación automática de solicitudes.
- Pool de conexiones integrado y reutilización de sockets.
- Manejo transparente de compresión GZip.
- Soporte para interceptores (interceptors) para registro, autenticación y reintentos.
- Constructores de solicitudes simples y de estilo fluent.
Configuración (Maven):
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4. También en la biblioteca
Programación reactiva en Go (Golang): bibliotecas, patrones y ejemplos
Trabajo con Excel en TypeScript: bibliotecas, ejemplos y herramientas
Tokens JWT en Java: guía completa para trabajar con JSON Web Tokens
Geolocalización y mapas en Node.js: bibliotecas para trabajar con mapas
Configuración de aplicaciones JavaScript: biblioteca config