Este documento fornece um resumo de um minicurso sobre a API Java Net para interagir com a internet. O minicurso aborda tópicos como o funcionamento da web, HTTPS, arquivos e streams, a API Java Net, baixar conteúdo da web, enviar formulários e ataques de força bruta. O objetivo é ensinar como desenvolver aplicações Java capazes de se comunicar com a internet.
1. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Java NET:
Interaja com a Internet
Ricardo Terra
rterrabh [at] gmail.com
Java NET: Interaja com a Internet 1
3. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Objetivo do Mini-curso
§ Entendendo o Funcionamento da Web
§ HTTPS
§ Entendendo File e Stream
§ API Java Net
§ Baixar o conteúdo de um recurso (página, imagem etc)
§ Submeter formulários
§ Ataque por Força Bruta
§ Desenvolvimento de Aplicações
§ MyDownload
§ MyPageChecker
3
4. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Entendendo o
Funcionamento da Web
Java NET: Interaja com a Internet 4
5. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Funcionamento da Web – HTTP e HTML
§ A maioria das conversas que ocorre na web entre clientes e
servidores são mantidas através do protocolo HTTP, que
possibilita conversas de requisição e resposta
§ O cliente envia uma requisição HTTP e o servidor retorna uma
resposta HTTP
§ Enfim, se você é um servidor web você fala HTTP
§ Portanto, uma conversação HTTP é uma sequência de
requisição/resposta
§ Isto é, o cliente pede uma coisa, o servidor responde, o cliente pede
outra coisa, o servidor responde...
5
6. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Funcionamento da Web
§ Requisição e resposta:
6
7. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Cliente e Servidor / HTTP e HTML
§ Quando um servidor responde a uma solicitação, ele geralmente
envia algum tipo de conteúdo para o browser, para que esse
possa exibí-lo
§ O formato HTML é o formato mais comum enviado como resposta
para um cliente pelo Servidor, pois esse é facilmente lido pelo
browser no cliente
§ Informação presente no content-type no cabeçalho HTTP
§ text/html!
§ text/plain!
§ application/pdf!
§ image/jpeg!
§ ... !
7
8. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Cliente e Servidor / HTTP e HTML
§ O HTTP é um protocolo da camada de aplicação que tem
características específicas para a web, mas ele depende de toda
a arquitetura TCP/IP para garantir que tanto a solicitação e
quanto a resposta sejam transmitidas entre o cliente e o servidor
TOPO DO TCP/IP
8
9. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Requisição e resposta
§ Principais elementos do fluxo de requisição:
§ método HTTP
§ endereço da página (URL) que está sendo acessada
§ parâmetros do formulário
§ Principais elementos do fluxo de resposta:
§ cabeçalho
§ código de status
§ Método HTTP
§ tipo do conteúdo (texto, imagem, HTML...)
§ conteúdo (o texto, a imagem, o HTML...)
9
10. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Requisição e resposta
§ Requisição HTTP
§ A primeira coisa que você encontrará é o nome do método HTTP
§ O nome do método informa ao servidor o tipo de solicitação que está
sendo feita e como o resto da mensagem será formatada.
§ O protocolo HTTP possui diversos métodos, mas usaremos e
aprenderemos os mais comuns: GET e POST
10
11. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Requisição e resposta
§ Método GET
§ É o método mais simples do HTTP e seu principal trabalho é pedir
um recurso
§ Pode ser qualquer tipo de recurso: uma página, uma imagem, um PDF,
etc
§ O caminho até o recurso e quaisquer parâmetros adicionados à
URL serão incluídos na própria barra de endereços
§ Podemos usar o GET para formulários, porém com desvantagens:
§ O total de caracteres do GET é limitado
§ Os dados que você envia utilizando HTTP GET são anexados à URL,
portanto, seja o que for que você estiver transmitindo, ficará exposto
11
12. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Requisição e resposta
§ Método POST
§ É um método mais poderoso. É um GET++. Com o POST, você
pode solicitar algo e, ao mesmo tempo, enviar os dados de um
formulário para o servidor
§ Os dados a serem enviados ao servidor estão localizados na carga
útil (payload) da mensagem e podem ser bem extensos
Pacote IPv4
§ Por isto, o POST é considerado mais seguro que o GET
12
13. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Requisição e resposta
§ Enfim, para acesso a recursos utiliza-se GET e aplicações que
utilizam formulários utiliza-se POST
13
14. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Requisição e resposta
§ Resposta HTTP
§ uma resposta HTTP é composta de um cabeçalho (header) e o
corpo
§ o cabeçalho informa ao browser o método que está sendo utilizado, se
a solicitação obteve êxito (código) e o tipo de conteúdo está incluído no
corpo
§ corpo possui o conteúdo (por exemplo, HTML) que o browser exibirá
§ o código pode ser:
§ 1xx: Informativa: requisição recebida, processo em continuidade…
§ 2xx: Sucesso: a ação foi recebida, entendida e aceita com sucesso
§ 3xx: Redirecionamento: ação futura ainda deve ser tomada para
completar a requisição
§ 4xx: Erro no cliente: requisição contém sintaxe incorreta ou não pode
ser resolvida
§ 5xx: Erro no servidor: O servidor falhou ao responder uma aparente
requisição válida
14
15. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 15Java NET: Interaja com a Internet
HTTPS
§ E o HTTPS? Se utilizarmos, nossa aplicação é segura?!
16. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Entendendo File e Stream
Java NET: Interaja com a Internet 16
17. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
API Java Net
§ Antes de entrarmos na API Java Net, os seguintes pré-requisitos
devem ser abordados:
§ Classe File
§ Streams
§ Assim, esta seção apresenta uma visão geral desses assuntos
17
18. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Classe java.io.File!
§ Classe responsável em realizar métodos em arquivos físicos.
Para se construir um objeto do tipo File, deve saber o nome
completo do arquivo. Caso o arquivo esteja na raiz do
workspace pode apenas passar o nome do arquivo
§ Caso se passe o nome de um arquivo que não existe, este é
criado na primeira necessidade
§ Exemplo:
§ new File("C:pastameuArquivo.txt")!
§ new File("meuArquivoNoWorkspace.txt")!
§ new File(”/dev/etc/xpto.txt”)!
§ new File(”/bin")!
Java NET: Interaja com a Internet 18
19. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Classe java.io.File
§ Trabalhando com um arquivo:
File fileTexto = new File("arquivoTexto.txt");!
!System.out.println("Nome do arquivo: " + fileTexto.getName());!
!System.out.println("O arquivo existe? " + fileTexto.exists());!
!System.out.println(”Diretório? " + fileTexto.isDirectory());!
!if (fileTexto.isFile()) {!
! !System.out.println("É um arquivo do diretório: " !
! ! !+ fileTexto.getAbsolutePath());!
!}!
!System.out.println("Posso ler? " + fileTexto.canRead());!
! S y s t e m . o u t . p r i n t l n ( " P o s s o e s c r e v e r ? " +
fileTexto.canWrite());!
§ Enfim, classe File não manipula arquivos...
§ Então, quem manipula?! Streams...
!
Java NET: Interaja com a Internet 19
20. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Streams
§ Java fornece uma interface consistente ao programador,
independente do dispositivo real que é acessado
§ Essa abstração é chamada stream e o dispositivo real
pode ser:
§ arquivo (file)
§ impressora
§ socket
§ Internet
§ …
§ Em outras palavras, você trabalha com qualquer
dispositivo do mesmo modo (com certas limitações)
Java NET: Interaja com a Internet 20
21. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Streams
§ Basicamente, existem dois principais tipos de streams:
§ stream de texto
§ Manipula caracteres
§ Leitura: Reader!
§ Escrita: Writer!
§ stream binário
§ Manipula bytes
§ Leitura: InputStream!
§ Escrita: OutputStream
Java NET: Interaja com a Internet 21
22. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Streams!
Java NET: Interaja com a Internet 22
23. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Streams
§ Devido ao foco do curso, não colocarei exemplos de uso
§ O conhecimento necessário será absorvido durante as
explicações da próxima seção (on-the-fly)
Java NET: Interaja com a Internet 23
24. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
API Java Net
Java NET: Interaja com a Internet 24
25. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
API Java Net
§ API completa desenvolvida pela Oracle / Sun para acessos
à Internet
§ Com essa API podemos:
§ Buscar recursos web (página HTML, por exemplo)
§ Submeter formulários
§ Nos próximos slides veremos alguns exemplos básicos da
utilização dessa API
Java NET: Interaja com a Internet 25
26. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
API Java Net
§ Acessando um site
§ Lendo do InputStream da URLConnection!
§ Projeto JavaNet: com.terra.exemplos.RecursoHTML!
§ O conteúdo retornado é uma HTML, isto é, texto!
§ Logo, qual o papel de um browser?
Java NET: Interaja com a Internet 26
27. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
API Java Net
§ Só com o que já sabemos, podemos baixar qualquer
conteúdo e salvá-lo em disco (espécie de um programa de
download)
§ Baixando um recurso (imagem ou pdf, por exemplo):
§ Lendo do InputStream da URLConnection
§ Escrevendo no OutputStream de um arquivo!
§ Projeto JavaNet: com.terra.exemplos.SalvarRecurso!
Java NET: Interaja com a Internet 27
28. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
API Java Net
§ Submetendo um formulário
§ Descobrir url do formulário e nome dos seus campos
§ Antes da submissão
§ Uso de URLEncoder para passagem de parâmetros
§ Escrita no OutputStream da URLConnection!
§ Depois da submissão
§ Lendo do InputStream da URLConnection!
§ Projeto JavaNet: com.terra.exemplos.Formulario!
Java NET: Interaja com a Internet 28
29. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Ataque por Força Bruta
Java NET: Interaja com a Internet 29
30. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Força Bruta
§ Tentar todas as possibilidades...
30
31. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Força Bruta
§ Exemplo Motivador: SINEF
§ Técnicas para evitar
§ Limite de Tentativas
§ Você utilizou 5 tentativas. Usuário bloqueado.
§ Tempo de Ociosidade
§ Você utilizou 5 tentativas. Usuário bloqueado por 30 minutos.!
§ Imagem
31
32. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Força Bruta
§ Como fazer?
§ Descobrir o formulário e o nome do seus campos
§ Bolar um algoritmo para gerar todas as combinações
§ Ir tentando…
§ Tome cuidado que é possível descobrí-lo pelo seu IP
§ Não use para o mal:
§ www.peladeiro.com.br
§ qualquer outro... deixo com vocês...
Java NET: Interaja com a Internet 32
33. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Desenvolvimento de Aplicações
Java NET: Interaja com a Internet 33
34. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Desenvolvimento de Aplicações
§ Acho que já foi possível notar que o mais legal da API
Java Net não é acessar à Internet, mas sim, as aplicações
que pode gerar
§ Nesta seção, faremos a criação de dois aplicativos:
§ MyDownload
§ Programa para fazer download pela Internet
§ MyPageChecker
§ Programa para verificar se houve alterações em
uma determinada página
Java NET: Interaja com a Internet 34
35. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Desenvolvimento de Aplicações
§ MyDownload
§ Programa para fazer download pela Internet
§ Algo como:
§ Pacotes:
§ com.terra.mydownload.{thread,gui,main}!
Java NET: Interaja com a Internet 35
36. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Desenvolvimento de Aplicações
§ MyPageChecker
§ Programa para verificar se houve alterações em uma
determinada página
§ Algo como:
§ Pacotes:
§ com.terra.mypagechecker.{thread,gui,main}!
Java NET: Interaja com a Internet 36
37. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Considerações Finais
Java NET: Interaja com a Internet 37
38. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Considerações Finais
§ Use para o BEM!!!
38
39. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Dúvidas?
???
39
40. Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011Java NET: Interaja com a Internet
Ricardo Terra
rterrabh [at] gmail.com
Apresentação e projeto Java disponíveis em:
www.ricardoterra.com.br/palestras
Principais referências bibliográficas:
HORSTMANN, C; CORNELL, G. Core Java: Volume 1 – Fundamentos.
8 ed. São Paulo: Pearson, 2010.
DEITEL, P; DEITEL, H. Java: Como Programar. 8 ed. São Paulo:
Pearson, 2010.
Obrigado!
40