Introdução: por que URLConnection é um must know para desenvolvedores Java
\n\nVocê 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.
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.
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á!
O que é java.net.URLConnection e para que serve?
\n\nA 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
- 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
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.
Abordagem 1: Método clássico com HttpURLConnection (testado pelo tempo)
\n\nEste 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\nExemplo 1: Requisição GET com processamento de resposta
\n\nimport 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\nAnálise do código:
\n- \n
setRequestMethod— define o método HTTP (GET, POST, PUT, DELETE) \n setRequestProperty— configura cabeçalhos (User-Agent, Content-Type, etc.) \n Blogs
Book Recommendations
Leia também
Cliente HTTP em Rust: fazendo requisições corretamente do A ao Z
Apache Camel: o que é e para que serve? Análise com código em Java
OAuth 2.0 e autorização JWT em PHP: guia completo
Tratamento de Erros em PHP: try/catch e muito mais — guia completo
Trabalhando com o sistema de arquivos em TypeScript: um guia prático