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

Cliente HTTP em Java: fazendo requisições corretamente



No desenvolvimento moderno, praticamente qualquer aplicação interage com serviços externos via HTTP. Seja uma REST API, carregamento de dados do servidor ou envio de formulários — saber trabalhar com requisições HTTP é uma habilidade obrigatória para o desenvolvedor Java. Neste artigo, vamos analisar como criar um cliente HTTP em Java, usando tanto ferramentas padrão quanto bibliotecas de terceiros populares. Você aprenderá como executar corretamente requisições GET e POST, tratar erros e fazer parsing de respostas.



1. Abordagem clássica: HttpURLConnection



Por muito tempo, a forma padrão de trabalhar com HTTP em Java foi a classe HttpURLConnection. Ela faz parte do pacote java.net e não requer instalação de dependências adicionais. Vejamos um exemplo de execução de uma requisição GET:



import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;

public class SimpleHttpClient { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json");

int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder();

while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response: " + response.toString()); } else { System.out.println("GET request failed"); } connection.disconnect(); }}


Para uma requisição POST com envio de dados JSON, o código será um pouco mais complexo:



import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;

public class PostExample { public static void main(String[] args) throws Exception { URL url = new URL("https://api.example.com/users"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true);

String jsonInput = "{\\"name\\":\\"John\\",\\"email\\":\\"john@example.com\\"}";

try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInput.getBytes("utf-8"); os.write(input, 0, input.length); }

int responseCode = connection.getResponseCode(); System.out.println("POST Response Code: " + responseCode);

if (responseCode == HttpURLConnection.HTTP_CREATED) { // Leitura da resposta análoga ao GET } connection.disconnect(); }}


Vantagens do HttpURLConnection:

  • Não requer bibliotecas adicionais
  • Controle total sobre a requisição
  • Suporte a todos os métodos HTTP


Desvantagens:

  • API verbosa e inconveniente
  • Difícil tratamento de erros
  • Sem suporte nativo a protocolos modernos (HTTP/2)


2. Padrão moderno: HttpClient (Java 11+)



A partir do Java 11, um novo java.net.http.HttpClient foi adicionado à biblioteca padrão. Ele fornece uma API moderna, assíncrona e muito mais conveniente. Veja como fica uma requisição GET com ele:



import java.net.URI;import java.net.http.HttpClient;import java.net.ht                

Blogs

Book Recommendations