Cliente HTTP em Java: fazendo requisições corretamente de A a Z

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 de A a Z



No desenvolvimento moderno em Java, a interação com serviços web externos e REST API tornou-se parte integrante de praticamente qualquer aplicação. Independentemente de você estar escrevendo um microsserviço, um aplicativo móvel ou um sistema corporativo, saber enviar requisições HTTP corretamente é uma habilidade criticamente importante. Neste artigo, abordaremos todas as formas de criar um cliente HTTP em Java: desde o clássico HttpURLConnection até bibliotecas modernas, como java.net.http.HttpClient, OkHttp e RestTemplate. Você aprenderá como fazer requisições GET, POST, PUT e DELETE, processar respostas e escolher a ferramenta certa para sua tarefa.



1. Abordagem clássica: HttpURLConnection



Por muitos anos, a forma padrão de trabalhar com HTTP em Java foi a classe HttpURLConnection. Ela faz parte do JDK e não requer dependências adicionais. No entanto, sua API é considerada de baixo nível e verbosa, especialmente para requisições complexas.



Exemplo de requisição GET:

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

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

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

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()); }}


Exemplo de requisição POST com JSON:

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 jsonInputString = "{\\"name\\": \\"John\\", \\"age\\": 30}"; try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); }

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


Vantagens: embutido no JDK, não requer bibliotecas.
Desvantagens: código complexo, sem suporte a HTTP/2, trabalho inconveniente com timeouts e erros.



2. HttpClient moderno (Java 11+)



A partir do Java 11, um novo java.net.http.HttpClient foi adicionado à biblioteca padrão. Ele suporta HTTP/2, WebSocket, requisições assíncronas e oferece uma API muito mais limpa e moderna.



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 ModernHttpClientExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://a

Blogs

Book Recommendations