Cliente HTTP para Java: visão geral das principais bibliotecas (Java 11, Apache, OkHttp, Retrofit)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente HTTP para Java: visão geral das principais bibliotecas

No desenvolvimento Java moderno, praticamente nenhuma aplicação funciona sem interação via protocolo HTTP. Envio de requisições para APIs REST, upload de arquivos, trabalho com microsserviços — tudo isso exige um cliente HTTP confiável e prático. Neste artigo, veremos as quatro bibliotecas mais populares para trabalhar com HTTP em Java: o HttpClient padrão (Java 11+), Apache HttpClient, OkHttp e Retrofit. Você conhecerá suas características, pontos fortes e terá exemplos práticos de código.



1. Java 11 HttpClient (java.net.http)

A partir do Java 11, um cliente HTTP moderno foi adicionado à biblioteca padrão, com o objetivo de substituir o obsoleto HttpURLConnection. Ele suporta HTTP/2, WebSocket, requisições assíncronas e fluxos reativos.

Vantagens:

  • Não requer dependências adicionais — já está incluído no JDK.
  • Suporte a HTTP/2 e atualização automática de protocolo.
  • API conveniente com chamadas síncronas e assíncronas.
  • Suporte nativo para gerenciamento de cookies, redirecionamentos e autenticação.

Exemplo de requisição 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()); }}

Exemplo de 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.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

Uma biblioteca clássica da Apache, que por muito tempo foi o padrão de facto. A versão mais recente (5.x) recebeu melhorias significativas: suporte a HTTP/2, melhor gerenciamento de pool de conexões e configuração mais flexível.

Vantagens:

  • Máxima flexibilidade e ajuste fino (timeouts, interceptadores, cache).
  • Estabilidade comprovada ao longo do tempo.
  • Suporte a vários esquemas de autenticação (Basic, Digest, NTLM).
  • Boa integração com proxy e SSL.

Exemplo de requisição GET com 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