Como acessar sites (URL) com java
Boa tarde, estou aqui num raro momento de ócio e resolvi postar algo simples, que é acessar algum site com o Java e ler seu código HTML.
Para tal utilizaremos as classes URL e HTTPUrlConnection do pacote java.net.
Começamos criando uma instancia de URL, passando ao seu construtor uma String. Como visto no exemplo abaixo essa String é a própria URL que desejamos acessar.
java.net.URL url = new java.net.URL("http://www.vaniomeurer.com.br");
Detalhe que esse construtor pode lançar uma exception chamada MalformedURLException e essa mesma é uma exception verificada, então precisamos tratá-la no código, ficando assim nosso código:
try { java.net.URL url = new java.net.URL("http://www.vaniomeurer.com.br"); }catch (java.net.MalformedURLException e){ System.out.println("Erro ao criar URL. Formato inválido."); }
Existem alguns outros construtores para a classe java.net.URL, porem esse é o mais comum.
Depois que já temos a nossa URL, precisamos acessá-la. O Java já traz uma classe que nos abstrai muitos detalhes de baixo nível do protocolo HTTP. A classe é a java.net.HTTPURLConnection e usamos como a seguir:
java.net.HTTPURLConnection urlConnection = (java.net.HTTPURLConnection) url.openConnection();
Como o método retorna uma URLConnection abstrata, precisamos fazer o cast para nossa HTTPURLConnection, pois estamos tratando de uma transação HTTP.
Novamente precisamos tratar uma exception, nesse caso o método openConnection da URL pode retornar uma IOException, então modificando e juntando os códigos temos:
try { java.net.URL url = new java.net.URL("http://www.vaniomeurer.com.br"); java.net.HTTPURLConnection urlConnection = (java.net.HTTPURLConnection) url.openConnection(); } catch (java.net.MalformedURLException e){ System.out.println("Erro ao criar URL. Formato inválido."); } catch (java.io.IOExcetpion e2) { System.out.println("Erro ao acessar URL."); }
Sabendo que a classe MalformedURLException herda IOException poderíamos ter tratado somente a exception IOExceptin, mas deixei assim para que o erro fique mais especifico.
Tendo aberta a conexão precisamos pegar as informações, para isso abrimos a stream de input assim:
java.io.BufferedReader in = new java.io.BufferedReader(new java.ioInputStream(urlConnection.getInputStream()));
Também temos disponível o stream de Output, que pode ser conseguido através do método getOutputStream.
Com o stream de entrada (input), basta percorrermos o stream para mostrarmos a página HTML.
String line = null; while( (line = in.readLine()) != null ){ System.out.println(line); }
Conforme fizemos, vamos ler linha por linha a página HTML e exibir na tela. Poderíamos ter usado qualquer outro leitor de streams.
Pronto, lemos uma página HTML utilizando Java.
Precisamos agora fechar a conexão e os streams abertos.
in.close(); urlConnection.disconnect();
IMPORTANTE: precisamos sempre fechar os streams antes da conexão, caso contrario lançaríamos uma exception!
O código completo ficaria assim:
package br.com.vaniomeurer.exemplos import java.net.URL; import java.net.HTTPURLConnection; import java.net.MalformedURLException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class AcessarURL { public static void main(String args[]) { if (args.length == 0) { System.out.println("Não foi especificado nenhuma URL."); // Fechando aplicação. System.exit(1); } // Pegando a url passada como parametro. String urlName = args[0]; try { URL url = new URL(urlName); HTTPURLConnection urlConnection = (HTTPURLConnection) url.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); String line = null; while( (line = in.readLine()) != null ){ System.out.println(line); } in.close(); urlConnection.disconnect(); } catch (MalformedURLException e){ System.out.println("Erro ao criar URL. Formato inválido."); System.exit(1); } catch (IOException e2) { System.out.println("Erro ao acessar URL."); System.exit(1); } } }
Compilando e executando o comando “java br.com.vaniomeurer.exemplos.AcessarURL http://www.vaniomeurer.com.br” teríamos impresso o código HTML desse site.
Espero que esse mini tutorial seja útil a alguém, como estou em uma máquina que não tem o JDK não pude compilar para testar, mas logo o faço e edito caso algo esteja errado.
Até, Vânio Meurer (vaninhO)