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 , ,

14 comentários

EasyFaces – Apresentação do projeto

30, novembro, 2009

Bom dia povo,

a apresentação do projeto EasyFaces como escrevi no post anterior ocorreu no dia 23/11.
A mesma foi realizada para a defesa do nosso grau de Bacharel em Sistemas de Informação pela Universidade do Sul de Santa Catarina (UNISUL).
Fomos orientados pelo professor Edjandir Correa Costa (MSc.), nossa banca foi composta pelos Srs. Max Roberto Pereira (Dr.), Luiz Alfredo Soares Garcindo (Dr.) e Cássio Nandi Citadim.

Acho que a apresentação ficou bem legal, você pode conferir no video abaixo:

EasyFaces – Pacote de Componentes JSF from EasyFaces on Vimeo.

Os slides tambem estão dispostos a seguir:

Já recebemos alguns contatos pelo site, alguns parabenizando e outros reportando algum tipo de comportamento inesperado. Todos serão considerados e quando necessário corrigidos nas versões posteriores.

Vale ressaltar que é de suma importância que você de seu feedback sobre o projeto, para sabermos por onde seguir e facilitarmos a vida de mais alguns desenvolvedores (como nós) :)

Não esquecendo também que a idéia é liberar o código fonte do projeto para que mais pessoas também possam ajudar no desenvolvimento e amadurecimento do projeto.

Acho que seria isso, agradeço pelas mensagens de apoio e com o decorrer do projeto venho postar as novidades por aqui.

Vânio Meurer (vaninh0)

Vanio Meurer EasyFaces, Java EE , ,

1 comentário