Informática Numaboa - Tutoriais e Programação
Tutorial CGI - GET e POST
Seg 17 Nov 2008 22:16 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Segunda, 17 Novembro 2008 22:39
- Autor: vovó Vicki
- Acessos: 14264
O HyperText Transfer Protocol (Protocolo de Transferência de Hipertexto - HTTP) é o protocolo de comunicação utilizado para a troca de dados entre um navegador e um servidor web. É o protocolo de comunicação que você aciona quando digita um endereço no seu navegador: http://www...
Existem vários métodos HTTP. Dois deles estão associados à transferência de dados de formulários e são muito importantes: o método GET e o método POST.
O método GET
GET, um dos métodos do HTTP, é acionado por meio de um formulário HTML através da diretiva method="get" incluída na tag <form>. Por meio deste método, os dados constantes no formulário são primeiramente transmitidos ao software servidor e este, por sua vez, armazena os dados temporariamente numa variável de contexto denominada QUERY_STRING.
Um script CGI, chamado através da diretiva action= incluída na tag inicial do formulário, precisa extrair os dados dessa variável de contexto para poder obter os dados que lhe foram enviados (veja em Tutorial CGI - Variáveis de Contexto). Usando PERL, por exemplo, é possível extrair esses dados com $dados_form = $ENV{'QUERY_STRING'};.
Quando um formulário HTML utiliza o método GET, o fluxo de dados é separado do endereço URL que chama a CGI através de um ponto de interrogação (?). Esta forma de endereçamento e separação pode ser observada no campo de endereços do navegador do usuário, logo após o formulário ter sido enviado. Você verá algo como http://www.meusite.com/meuscript.cgi?nome=Maria&id=123
O método POST
POST, também um método do HTTP, é acionado por meio de um formulário HTML através da diretiva method="post" incluída na tag <form>.
Este método faz com que os dados do formulário sejam diretamente transmitidos ao endereço que constar da diretiva action=. Um script CGI, chamado por action=, precisa extrair os dados através da entrada padrão (standart input) para poder obter os dados transmitidos pelo formulário. Pode-se, por exemplo, usar PERL e indicar read(STDIN, $Dados, $ENV{'CONTENT_LENGTH'});.
Observe que o programa precisa obter o valor da variável de contexto CONTENT_LENGTH para saber quantos caracteres precisam ser lidos através da entrada padrão. Isto é necessário porque não existe um caracter separador no fluxo de dados.
A importância de se conhecer o método
Se você quiser fazer uso de um script CGI pronto, precisa saber por qual dos dois métodos o script espera receber dados. Normalmente isto vem documentado pelo autor do script. Alguns scripts mais inteligentes testam ambos os métodos - neste caso, não importa o método de transferência de dados que você usar no formulário - ambos vão funcionar.
Se você for escrever seus próprios scripts, lembre-se de determinar o método que deve ser utilizado no formulário. Ou programe de maneira inteligente: deixe o script preparado para ambos.
Fluxo de dados na transmissão de dados de formulários
Um formulário HTML típico é composto por campos nominados (p.ex. para nome, endereço e comentário). Na transmissão do formulário preenchido para o servidor web / programa CGI, os dados precisam ser transmitidos de tal forma que o script CGI seja capaz de identificar os campos do formulário e os valores dos mesmos. É por isso que existe um método de codificação específico que separa os campos do formulário dos seus respectivos valores. Este método de codificação baseia-se nas seguintes regras:
- Cada um dos elementos do formulário, inclusive seus valores, são separados entre si pelo símbolo & ("e" comercial ou ampersand).
- O nome e o valor (dado) de um elemento do formulário são separados por = (sinal de igual).
- Espaços em branco existentes nos dados (p.ex. várias palavras) são substituídos por + (sinal de adição).
- Todos os caracteres ASCII estendidos, com valores de 128 a 255 (hexadecimal 80 até FF), são substituídos por um conjunto constituído pelo sinal de % (porcento) seguido do valor hexadecimal do caracter (p.ex. o nosso ç (c cedilha) é substituído por %E7).
- Todos os caracteres utilizados nestas regras como delimitadores (ou seja, &, +, = e %) também são convertidos em hexadecimal seguindo a mesma regra para os caracteres ASCII estendidos.
Exemplo de Formulário
O exemplo a seguir mostra inicialmente o texto fonte de um formulário HTML e, logo abaixo, um gráfico mostrando como o formulário aparece num navegador. Logo abaixo do gráfico você poderá observar os dados codificados para a transmissão.
NomeUsuario=Spider&MailUsuario= O endereço de e-mail address está sendo protegido de spambots. Você precisa ativar o JavaScript enabled para vê-lo. & Texto=Isto+%E9+um+exemplo+de+coment%E1rio
Finalmentes
Bem, pessoal, é isto o que tenho para contar sobre a CGI. Se você leu todos os textos da série e aproveitou a leitura, valeu