Java NET: Interaja com a Internet - DCC
Transcrição
Java NET: Interaja com a Internet - DCC
Java NET: Interaja com a Internet Ricardo Terra rterrabh [at] gmail.com Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 1 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) Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 2 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 3 Entendendo o Funcionamento da Web Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 4 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... Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 5 Funcionamento da Web § Requisição e resposta: Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 6 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! § ... ! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 7 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 8 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...) Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 9 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 10 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 11 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 12 Requisição e resposta § Enfim, para acesso a recursos utiliza-se GET e aplicações que utilizam formulários utiliza-se POST Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 13 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 14 HTTPS § E o HTTPS? Se utilizarmos, nossa aplicação é segura?! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 15 Entendendo File e Stream Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 16 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 17 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 new new new File("C:\\pasta\\meuArquivo.txt")! File("meuArquivoNoWorkspace.txt")! File(”/dev/etc/xpto.txt”)! File(”/bin")! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 18 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());! !System.out.println("Posso escrever? " + fileTexto.canWrite());! § Enfim, classe File não manipula arquivos... § ! Então, quem manipula?! Streams... Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 19 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) Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 20 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 21 Streams! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 22 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) Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 23 API Java Net Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 24 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 25 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? Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 26 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! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 27 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! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 28 Ataque por Força Bruta Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 29 Força Bruta § Tentar todas as possibilidades... Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 30 Força Bruta § Exemplo Motivador: SINEF § Técnicas para evitar § Limite de Tentativas § § Tempo de Ociosidade § § Você utilizou 5 tentativas. Usuário bloqueado. Você utilizou 5 tentativas. Usuário bloqueado por 30 minutos.! Imagem Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 31 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... Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 32 Desenvolvimento de Aplicações Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 33 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 Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 34 Desenvolvimento de Aplicações § MyDownload § Programa para fazer download pela Internet § Algo como: § Pacotes: § com.terra.mydownload.{thread,gui,main}! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 35 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}! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 36 Considerações Finais Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 37 Considerações Finais § Use para o BEM!!! Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 38 Dúvidas? ??? Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 39 Obrigado! 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. Ricardo Terra (rterrabh [at] gmail.com) Java NET: Interaja com a Internet Maio, 2011 40