Cliente HTTP para Java: mejores bibliotecas para trabajar con HTTP

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: 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 BodyPublishers y de la respuesta mediante BodyHandlers.


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.                    

Recommendations