Cliente HTTP em Java: fazendo requisições corretamente

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
Aqui está a tradução do artigo HTML para português brasileiro, mantendo todas as tags e conteúdos inalterados:

Cliente HTTP em Java: fazendo requisições corretamente



No desenvolvimento web moderno, quase nenhuma aplicação pode funcionar sem interagir com servidores remotos. Seja integração com API REST, carregamento de dados ou envio de formulários — a capacidade de trabalhar corretamente com requisições HTTP em Java é uma habilidade obrigatória para um desenvolvedor. Neste artigo, analisaremos como criar um cliente HTTP confiável em Java, consideraremos abordagens modernas e melhores práticas.



Por que é importante usar o cliente HTTP correto?



Muitos desenvolvedores iniciantes usam a classe obsoleta HttpURLConnection, que surgiu no Java 1.1. Embora funcione, sua API é pesada, inconveniente e requer muito código repetitivo. A partir do Java 11, a biblioteca padrão introduziu o moderno java.net.http.HttpClient, que oferece:

  • Suporte a HTTP/2 e WebSocket
  • Requisições assíncronas via CompletableFuture
  • Padrão Builder simples e claro
  • Tratamento automático de cookies e redirecionamentos


Fundamentos do trabalho com HttpClient no Java 11+



Vamos considerar um exemplo básico de envio de uma requisição GET. Primeiro, criamos uma instância do cliente, depois formamos a requisição e a enviamos.



import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;

public class SimpleHttpClient { public static void main(String[] args) throws Exception { // Cria um cliente com timeout de conexão HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();

// Forma uma requisição GET HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/data")) .timeout(Duration.ofSeconds(30)) .header("Accept", "application/json") .GET() .build();

// Envia a requisição e recebe a resposta HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println("Status: " + response.statusCode()); System.out.println("Corpo da resposta: " + response.body()); }}


Observe o uso de BodyHandlers.ofString() — esta é uma maneira conveniente de obter o corpo da resposta como uma string. Se precisar processar JSON, é melhor usar BodyHandlers.ofInputStream() e passá-lo para o parser.



Enviando uma requisição POST com corpo



Para enviar dados ao servidor (por exemplo, ao registrar um usuário), usa-se uma requisição POST. Vamos considerar um exemplo com envio de JSON:



import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;

public class PostRequestExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient();

String json = """ { "name": "Ivan Ivanov", "email": "ivan@example.com", "age": 30 } """;

HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.example.com/users")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .timeout(Duration.ofSeconds(15)) .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() == 201) { System.out.println("Usuário criado com sucesso!"); System.out.println("ID: " + response.body()); } else { System

Blogs

Book Recommendations