Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais
Home Informática Tutoriais e Programação Perl e CGI Linguagem Perl - Acessando a CGI

Na Aldeia

Há 70 visitantes online

3297 registros
0 hoje
2 nesta semana
34 neste mês

Boas vindas: Jose

Estatística

Artigos: 1063
Leituras: 6026605
Arquivados: 21
Downloads: 533
Baixados: 171992
Glossário: 1208
Bibliografia: 25
Links: 90

Visitas de onde

Top 5:
Brasil flag 73%Brasil (43770)
Portugal flag 5%Portugal (2730)
EUA flag 3%EUA (2031)
Rússia flag 0%Rússia (247)
Holanda flag 0%Holanda (237)
60005 visitas de 99 países

Hoje:117
Ontem:2555
No mês:34190
Mês passado:25815
Total:60005
Recorde:3037
No dia:04.03.10
Leituras hoje:15053
Leituras Total:261977
Bots hoje:70
Dados desde:16.02.2010

Login



Kanji da hora




Faça contato






Sáb

22

Nov

2008


12:55

Linguagem Perl - Acessando a CGI PDF Imprimir Indique esta página
(1 voto, média 5.0 de 5)
Escrito por vovó Vicki   


A linguagem Perl possui diretivas típicas de CGI, próprias para lidar com dados de formulários, acionar serviços do servidor como e-mail, páginas HTML, etc. Neste tutorial será mostrado como a Perl se comunica com a interface CGI para acionar estes serviços.

Obter dados de formulários

Através de código Perl pode-se obter dados de um formulário HTML através da CGI. O exemplo abaixo não é um programa completo, é apenas um módulo que pode ser inserido num script.

if($ENV{'REQUEST_METHOD'} eq 'GET') {
   $Dados = $ENV{'QUERY_STRING'}
} else {
   read(STDIN, $Dados, $ENV{'CONTENT_LENGTH'});
}
 
@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/<!--(.|\n)*-->//g;
   $Form[$i] = $nome;
   $i = $i + 1;
   $Form[$i] = $valor;
   $i = $i + 1;
}

Este código Perl inicialmente testa se o formulário HTML usou o método GET ou o método POST e, dependendo do resultado, busca os dados. Portanto, independentemente do método utilizado pelo formulário, este código obtém os dados enviados.

Os dados são colocados na escalar $Dados. O valor de $Dados tem a aparência do fluxo de dados típica de uma transferência de dados de formulários.

Com a diretiva @CamposForm = split(/&/, $Dados);, a cadeia de caracteres $Dados é transformada numa lista. O caractere delimitador, aquele que separa os elementos do fluxo de dados, é o "e comercial" (&). Os campos do fluxo de dados do formulário são separados em campos únicos através deste caracter delimitador.

Logo a seguir, cada um dos campos da nova lista @CamposForm é tratado dentro de um loop foreach. Primeiro, cada campo é separado em dois componentes indicando-se como delimitador o sinal de igual =. Os dois componentes são atribuídos às escalares $nome e $valor. A escalar $nome recebe o mesmo valor definido na declaração name= do formulário HTML correspondente. A escalar $valor recebe o conteúdo digitado ou escolhido pelo usuário que preencheu o formulário. Supondo-se que o formulário HTML contenha um campo de entrada de dados que tenha sido definido com <input name="Apelido" size="60" maxlength="60"> e que o usuário tenha digitado "Cuca Fresca", então, para este campo do formulário, a escalar $nome terá o valor "Apelido" e a escalar $valor será igual a "Cuca Fresca".

Com os procedimentos de procura e substituição seguintes, ainda dentro da alça foreach, são retirados todos os caracteres poluidores que tenham sobrado no fluxo de dados do formulário.

Os dados do formulário, por fim, são atribuídos à lista @Form. Os elementos pares desta lista, ou seja, $Form[0], $Form[2], $Form[4], etc, contém os nomes dos campos. Os elementos ímpares, $Form[1], $Form[3]... contém os valores dos campos.

Info Observação: Os códigos Perl aqui apresentados são muito simples. Têm como principal tarefa esclarecer os princípios do processamento. Se você necessita de soluções mais profissionais, terá de programá-las ou então procurar scripts freeware prontos.

Enviar dados de formulário por email

Os dados de formulários preenchidos podem, por exemplo, ser gravados num arquivo do servidor. A maioria, porém, prefere receber imediatamente os dados do formulário preenchido por um usuário via e-mail.

O código Perl a seguir é a continuação do script anterior.

$ProgramaMail = "/usr/lib/sendmail";
$MailAssunto = "Feedback de Formulário";
$Destinatario = "SeuNome\@Provedor\.xxx";
$NomeRemetente = $Form[1];
$MailRemetente = $Form[3];
 
open (MAIL,"|$ProgramaMail -t") || die;
 
print MAIL "To: $Destinatario\n";
print MAIL "From: $Mailremetente $NomeRemetente\n";
print MAIL "Subject: $MailAssunto\n\n";
 
$i = 0;
$max = $#Form;
for($i=0;$i<=$max;$i=$i+2) {
   print MAIL "$Form[$i]: $Form[$i+1]\n";
}
close(MAIL);

Este código Perl começa definindo algumas escalares. A primeira e a mais importante escalar é $ProgramaMail. Aqui é preciso indicar qual e onde o programa gerenciador de e-mails se encontra no servidor. O programa padrão é o sendmail, presente em quase todos os servidores da Internet - uma indicação típica para servidores Unix/Linux é /usr/lib/sendmail. Informe-se com o seu provedor de serviços e confirme o nome e a localização do gerenciador de e-mails colocado à sua disposição. Lembre-se, se esta diretiva não estiver absolutamente correta, o envio de e-mails não será possível.

A escalar $MailAssunto recebe o que deve constar no subj (subject) do cabeçalho do e-mail. A escalar $Destinatario deve conter o endereço para o qual o e-mail deve ser enviado.

As duas escalares $NomeRemetente e $MailRemetente foram incluídas no código apenas para completar o exemplo. Estas escalares recebem seu conteúdo do formulário. Aliás, isto só funciona se o formulário requisitante tiver campos para o nome e para o endereço de e-mail do usuário. Neste caso, é necessário indicar em $Form[#] o número correto dos elementos que correspondem a estes campos.

Após tratar as escalares, o código abre o programa gerenciador de e-mails do servidor. A opção -t na função open se refere ao programa sendmail. Caso o gerenciador seja outro, informe-se sobre a forma correta de acioná-lo para enviar e-mails.

Se o programa gerenciador não puder ser aberto, o script é interrompido com die, sem nenhum comentário. Neste ponto você pode, se quiser, adicionar uma mensagem de erro personalizada.

Através do comando print, o script escreve os dados conhecidos no cabeçalho do e-mail. Todos os e-mails da Internet têm um formato único. No cabeçalho constam diversas informações. Algumas delas são acrescentadas apenas no decorrer da viagem para o destinatário.

Dentro do loop for são escritos os diversos campos e seus respectivos valores. Os nomes dos campos e o conteúdo dos campos são separados por dois pontos.

Enviar código HTML ao navegador

Uma das tarefas mais importantes de scripts CGI é enviar código HTML ao navegador solicitante. Gerando este código através de um script pode-se incluir no código HTML valores de variáveis do script.

O código a seguir é complemento dos scripts anteriores. Ele envia um agradecimento ao usuário que tenha preenchido um formulário.

print "Content-type: text/html\n\n"; print "\n";
print "<html>\n";
print "<head>\n";
print "<title>Obrigado</title>\n";
print "</head>\n";
print "body\n";
print "<h1>Obrigado</h1>\n";
print "Agradecemos que tenha preenchido nosso formulário.\n";
print "Para seu controle, seguem os dados do mesmo:<p>\n";
 
for($i=0;$i<=$max;$i=$i+2) {
   print "<b>$Form[$i]:</b> $Form[$i+1]
\n";
}
print "<p><hr noshade size=1><p>\n";
print "<i>Seu nome,
    <a href=\"mailto:SeuNome\@dominio.com\">SeuNome\@dominio.com</a></i>";
print "</body>\n";
print "</html>\n";

Pode-se escrever código HTML com facilidade usando a função print da Perl. No exemplo foi criada e enviada ao navegador uma página HTML completa.

Importante no caso é a primeira diretiva: print "Content-type: text/html\n\n";. Isto ainda não é código HTML. A primeira coisa que um navegador solicitante precisa receber é um cabeçalho HTML (HTML header). Este cabeçalho precisa, no mínimo, indicar o tipo de dado que será enviado. Com esta diretiva informa-se que o código a ser enviado é do tipo texto HTML. Muito importante e imprescindível é a colocação dos dois \n\n no final. O primeiro \n é a quebra de linha para Content-type: text/html. O segundo \n envia uma quebra de linha (ou linha vazia), que é o que o navegador solicitante espera após a informação do tipo de dado. Após a linha vazia, o navegador aguarda o recebimento dos dados propriamente ditos. Este é o procedimento para se estabelecer uma conexão no protocolo http. É isso aí.

Dito isto, vamos esclarecer o envio dos dados. Com a função print envia-se, linha após linha, todo o código HTML desejado. O laço for, no meio do exemplo, merece uma observação especial. Do interior desse laço são enviados os conteúdos da lista @Form em formato HTML. Esta possibilidade de incluir variáveis no código HTML enviado é o motivo pelo qual a CGI é também frequentemente denominada de "HTML dinâmico".

Para terminar, verifique cuidadosamente o modo como o comando mailto é escrito no final do código exemplo. Quando você criar tags de HTML que exijam a presença de aspas duplas, como é o caso de href, as aspas precisam ser precedidas por uma barra invertida \ que serve como máscara. Caso você esqueça da barra invertida, o interpretador Perl gerará um erro e interromperá a execução do script. Isto me aconteceu mais de uma vez! Da mesma forma, caracteres reservados, que tenham uma função especial, também precisam de máscara. É o caso, por exemplo, da arroba @ que, sem máscara, identifica uma lista.

Última atualização ( Sáb, 22.11.2008 13:41 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons