Informática Numaboa - Tutoriais e Programação
Tutorial CGI - CGI e HTML
Seg 17 Nov 2008 21:07 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Segunda, 17 Novembro 2008 21:52
- Autor: vovó Vicki
- Acessos: 11351
Chamando a CGI através de HTML
CGI e HTML comunicam-se nos dois sentidos: por um lado, é possível chamar um script CGI através de uma página HTML que esteja ativa no seu monitor; por outro, um script CGI pode gerar código HTML e enviá-lo ao seu navegador, o qual mostrará a página correspondente no seu monitor.
Um script CGI pode processar dados que sejam enviados juntamente com uma chamada de uma página HTML. Por exemplo, um script CGI pode fazer uma pesquisa num banco de dados utilizando os dados que receber de um formulário de uma página HTML. O resultado do processamento dos dados pode ser enviado por um script CGI ao navegador na forma de código HTML. Dessa forma, o script que fez uma pesquisa num banco de dados pode enviar o resultado ao navegador, através de código HTML dinamicamente gerado.
Um script CGI também pode armazenar e ler dados num servidor. É assim que funcionam livros de visita ou fórums. Um usuário pode digitar dados num formulário de página HTML. Ao enviar o formulário, o script CGI é chamado e armazena os dados enviados. Um segundo script CGI ou outra chamada ao mesmo script pode gerar um código HTML contendo as entradas gravadas e enviá-lo para um navegador.
Um script CGI pode ser chamado por um arquivo HTML de diversas maneiras:
- Através de um formulário, logo no tag inicial <form> (exemplo: <form action="/cgi-bin/livrovisitas.pl" method="get">). A chamada ocorre após o envio do formulário. Os dados digitados ou assinalados pelo usuário ficam à disposição do script para serem processados. É dessa forma que funcionam mecanismos de busca, livros de visita ou carrinhos de compras eletrônicas.
- Através de links. Basta indicar o endereço do script CGI que deve ser executado (exemplo: <a href="/cgi-bin/estatistica.pl">Estatística</a>). Esta é uma forma lógica de chamar um script CGI sem enviar parâmetros (dados), como, por exemplo, um contador de acessos.
- Através de uma referência a uma imagem, também basta indicar o script como endereço URL na tag <img> (exemplo: <img src="/cgi-bin/contador.pl">). Neste caso, o script CGI precisa mandar como resposta uma imagem no formato GIF ou JPEG. A maioria dos contadores gráficos baseiam-se neste princípio.
- Através de uma diretiva Server Side Include (SSI) de um arquivo HTML, por exemplo, com o comando <!-- #exec cgi="/cgi-bin/contador.pl -->. Isto é muito prático para incluir informação dinâmica em forma de texto num arquivo HTML com a ajuda de um script CGI. Esta forma é adequada, por exemplo, para contadores de acesso baseados em texto.
- Através do carregamento automático do script CGI/programa CGI que deve ser executado. Para isto inclui-se na tag <meta> o endereço do script CGI (exemplo: <meta http-equiv="refresh" content="0"; URL=/cgi-bin/bemvindo.pl">).
Exemplo de troca de dados entre CGI e HTML
O exemplo seguinte realiza um procedimento CGI simples que esclarece a troca de dados entre CGI e HTML: num arquivo HTML o usuário pode preencher seu nome e digitar um comentário num formulário. Quando o formulário é enviado, o programa CGI comentario.pl é chamado. Este script está escrito em PERL. Ele recebe os dados do formulário, separa suas porções e gera um página HTML completa que contém os dados recebidos. O navegador mostra no monitor este código HTML gerado pelo script. Estude este exemplo com calma e não se preocupe demasiadamente com o código PERL do programa:
Página HTML com o formulário
Seu comentário
O formulário explicado
Foram definidos dois campos de entrada de dados no formulário do arquivo HTML. O primeiro (<input size="40" maxlength="40" name="NomeUsu">) é um campo de uma linha no qual o usuário deve digitar seu nome. O segundo (<textarea rows="5" cols="70" name="ComentaUsu" wrap=virtual>) é uma área de entrada de dados de linhas múltiplas onde o usuário pode digitar seu comentário.
Ao clicar no botão Enviar (<input type="submit" value="Enviar">), o formulário é enviado. O tratamento que deve ser dado ao formulário está indicado na tag introdutória: com o comando action="/cgi-bin/comentario.pl" é chamado o script CGI que deve processar os dados enviados. Os dados são encaminhados através de method="post". Isto significa que o script recebe os dados como parâmetros de entrada padrão (STanDart INput = STDIN). É como se você chamasse para execução, no seu computador local, um programa com um parâmetro.
Script CGI comentario.pl
Resposta CGI do programa comentario.pl\n";
@CamposForm = split(/&/, $Dados);
foreach $Campo (@CamposForm) {
($nome, $valor) = split(/=/, $Campo);
$valor =~ tr/+/ /;
$valor =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$valor =~ s///g;
$Form{$nome} = $nome;
$Form{$valor} = $valor;
print "$Form{$nome} = $Form{$valor}", "
\n";
}
print "\n";
O script explicado
O script PERL comentario.pl, localizado no diretório apropriado do servidor web, recebe os dados como parâmetros de entrada padrão (standart input) através do comando read(STDIN, $Dados, $ENV{'CONTENT_LENGTH'});. Logo em seguida, o programa começa a gerar uma página HTML que é enviada de volta ao navegador. Para isso são utilizados comandos print, que constroem um arquivo HTML com os elementos necessários.
A geração da página HTML é interrompida pela diretiva @FormCampos = split(/&/, $Dados);. A função split separa cada par de parâmetros enviados (nome e valor) e os armazena no array (matriz) @FormCampos. A seguir, a alça (loop) foreach processa cada um dos pares de dados. Os comandos estranhos e intimidadores que se seguem servem para transformar os dados recebidos em texto legível. Isto porque os dados recebidos pelo script são codificados de acordo com uma determinada convenção - a Mime-Type application/x-www-form-urlencoded.
Neste tipo de codificação, os espaços e os caracteres especiais são enviados como valores hexadecimais. Após a decodificação, o script apresenta os dados de cada campo do formulário (nós ainda estamos dentro do processo de geração de código HTML que está sendo enviado ao navegador). Após terminar a alça foreach, o script envia os elementos necessários para fechar a página HTML.
Do ponto de vista do usuário, a página que continha o formulário desaparece do monitor. No seu lugar, aparece uma nova página que contém o código HTML gerado por comentario.pl.
Observações
O exemplo acima serve apenas como exemplo de troca de informações entre HTML e CGI. Se você ainda não teve contato com a linguagem PERL e achou o código do script totalmente incompreensível... não se preocupe, é normal. PERL é uma linguagem muito poderosa, porém um tanto temperamental. À medida que os tutoriais avançarem, você vai conhecer mais desta linguagem. Neste ponto, o mais importante é conhecer as variáveis de contexto da CGI, explicadas no módulo Tutorial CGI - Variáveis de Contexto.