Cliente HTTP para Java: principais bibliotecas para trabalhar com HTTP
O desenvolvimento moderno em Java raramente ocorre sem interação com servidores remotos via protocolo HTTP. Seja para chamar uma API REST, fazer upload de arquivos ou integrar com microsserviços — o desenvolvedor precisa de um cliente HTTP confiável e prático. Neste artigo, veremos três bibliotecas líderes para Java: OkHttp, Apache HttpClient e o cliente Java HttpClient integrado (a partir do Java 11). Você conhecerá suas características, verá exemplos de código e entenderá qual biblioteca escolher para seu projeto.
1. Java HttpClient (integrado, Java 11+)
A partir do Java 11, a biblioteca padrão passou a incluir um cliente HTTP moderno, que substituiu o obsoleto HttpURLConnection. Ele suporta HTTP/2, WebSocket, requisições assíncronas e fluxos reativos.
Características:
- Não requer dependências adicionais — já vem no JDK.
- Suporte a chamadas síncronas (
send) e assíncronas (sendAsync). - Trabalha com HTTP/2 e faz downgrade automático para HTTP/1.1.
- Suporte nativo a WebSocket.
- Manipulação prática do corpo da requisição via
BodyPublisherse da resposta viaBodyHandlers.
Exemplo: requisição 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("Status: " + response.statusCode()); System.out.println("Corpo: " + response.body()); }}Exemplo: requisição POST assí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("Status: " + response.statusCode()); System.out.println("Resposta: " + response.body()); }).join(); }}2. OkHttp (Square)
OkHttp é uma das bibliotecas mais populares para Android e Java. Ela é conhecida por seu alto desempenho, gerenciamento automático de conexões e suporte a HTTP/2 e SPDY. O OkHttp é usado internamente pelo Retrofit e pelo Picasso.
Características:
- Suporte a HTTP/2 e multiplexação automática de requisições.
- Pool de conexões integrado e reutilização de sockets.
- Manipulação transparente de compressão GZip.
- Suporte a interceptadores (interceptors) para logging, autenticação e retentativas.
- Construtores de requisição simples e no estilo fluent.
Adicionar dependência (Maven):
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.
``` Também na biblioteca
Air para Go: guia completo com exemplos
Parsing de HTML em Rust: bibliotecas e exemplos práticos
Agendador de Tarefas Swift: GCD, OperationQueue e Combine para iOS/macOS
Trabalhando com S3 e armazenamentos em nuvem em TypeScript: bibliotecas e exemplos