java net: interagindo com a internet
TRANSCRIPT
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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
CV
Nome: Ricardo Terra Email: rterrabh [at] gmail.com www: ricardoterra.com.br Twitter: rterrabh Lattes: lattes.cnpq.br/ 0162081093970868
Ph.D. (UFMG/UWaterloo), Post-Ph.D. (INRIA/Université Lille 1)
Background Acadêmico: UFLA (desde 2014), UFSJ (1 ano), FUMEC (3 anos), UNIPAC (1 ano), FAMINAS (3 anos)
Profissional: DBA Eng. (1 ano), Synos (2 anos), Stefanini (1 ano)
Java NET: Interaja com a Internet 2 Maio, 2011
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Entendendo o Funcionamento da Web
Java NET: Interaja com a Internet 4
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet
Funcionamento da Web
§ Requisição e resposta:
6
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 15 Java NET: Interaja com a Internet
HTTPS
§ E o HTTPS? Se utilizarmos, nossa aplicação é segura?!
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Entendendo File e Stream
Java NET: Interaja com a Internet 16
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
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:\\pasta\\meuArquivo.txt")!§ new File("meuArquivoNoWorkspace.txt")!§ new File(”/dev/etc/xpto.txt”)!§ new File(”/bin")!
Java NET: Interaja com a Internet 18
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
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
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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Streams!
Java NET: Interaja com a Internet 22
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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
API Java Net
Java NET: Interaja com a Internet 24
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
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
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
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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Ataque por Força Bruta
Java NET: Interaja com a Internet 29
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet
Força Bruta
§ Tentar todas as possibilidades...
30
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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
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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Desenvolvimento de Aplicações
Java NET: Interaja com a Internet 33
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
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
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
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011
Considerações Finais
Java NET: Interaja com a Internet 37
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet
Considerações Finais
§ Use para o BEM!!!
38
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet
Dúvidas?
???
39
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java 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