Arquivo

Textos com Etiquetas ‘java.net.URL’

Como acessar sites (URL) com java

14, março, 2010

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)

Vanio Meurer Java SE , ,