java.net.URLConnection: como trabalhar com requisições e respostas HTTP

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

Introdução: por que URLConnection é um must know para desenvolvedores Java

\n\n

Você já se perguntou como seu navegador favorito ou aplicativo móvel se comunica com o servidor? A mágica está escondida em requisições HTTP simples, mas poderosas. E em Java, para isso, existe o seu "canivete suíço" — a classe java.net.URLConnection.

\n\n

Apesar de no Java 11 ter surgido o novo HttpClient modular, milhares de desenvolvedores em todo o mundo continuam usando o bom e velho URLConnection. Por quê? Primeiro, é código legado que precisa ser mantido. Segundo, é simples e não requer bibliotecas de terceiros. E terceiro, entender como as requisições HTTP funcionam em baixo nível faz de você um verdadeiro profissional.

\n\n

Neste artigo, não vamos apenas copiar uma resposta do Stack Overflow. Vamos analisar duas abordagens para trabalhar com URLConnection e compará-las com o moderno HttpClient. Você aprenderá como enviar requisições GET e POST, tratar erros, configurar cabeçalhos e ler respostas do servidor. Vamos lá!

\n\n

O que é java.net.URLConnection e para que serve?

\n\n

A classe java.net.URLConnection é uma classe abstrata que representa uma conexão ativa com um recurso especificado por uma URL. Em palavras simples: é uma ponte entre sua aplicação Java e o servidor na internet. Ela pode:

\n
    \n
  • Abrir uma conexão com o servidor
  • \n
  • Enviar dados (GET, POST, PUT, DELETE)
  • \n
  • Ler a resposta do servidor
  • \n
  • Gerenciar cabeçalhos de requisição e resposta
  • \n
  • Trabalhar com cookies
  • \n
\n\n

Mas há um detalhe: URLConnection não faz nada sozinho. Ela apenas fornece o mecanismo. Toda a mágica é feita por suas subclasses — por exemplo, HttpURLConnection para trabalhar com HTTP.

\n\n

Abordagem 1: Método clássico com HttpURLConnection (testado pelo tempo)

\n\n

Este método foi usado pelos pais fundadores da programação Java. É confiável, mas exige trabalho manual. Vamos analisá-lo com um exemplo de requisição GET.

\n\n

Exemplo 1: Requisição GET com processamento de resposta

\n\n
import java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.net.HttpURLConnection;\nimport java.net.URL;\n\npublic class GetRequestExample {\n    public static void main(String[] args) throws Exception {\n        // 1. Criar objeto URL\n        URL url = new URL("https://api.github.com/users/octocat");\n        \n        // 2. Abrir conexão\n        HttpURLConnection connection = (HttpURLConnection) url.openConnection();\n        \n        // 3. Configurar requisição\n        connection.setRequestMethod("GET");\n        connection.setRequestProperty("User-Agent", "Mozilla/5.0");\n        connection.setConnectTimeout(5000);\n        connection.setReadTimeout(5000);\n        \n        // 4. Verificar código de resposta\n        int responseCode = connection.getResponseCode();\n        System.out.println("Response Code: " + responseCode);\n        \n        // 5. Ler corpo da resposta\n        if (responseCode == HttpURLConnection.HTTP_OK) {\n            BufferedReader in = new BufferedReader(\n                new InputStreamReader(connection.getInputStream()));\n            String inputLine;\n            StringBuilder response = new StringBuilder();\n            \n            while ((inputLine = in.readLine()) != null) {\n                response.append(inputLine);\n            }\n            in.close();\n            \n            System.out.println("Response Body: " + response.toString());\n        } else {\n            System.out.println("GET request failed");\n        }\n        \n        // 6. Fechar conexão\n        connection.disconnect();\n    }\n}\n
\n\n

Análise do código:

\n