 |
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...
É para isto que existem os métodos HTTP. Dois desses métodos, associados à transferência de dados de formulários, 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 desse 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 também 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 os métodos. |
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 (dados) 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 seguinte 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.
<form action="/cgi-bin/comentario.pl" method=post>
<pre>
Nome: <input name="NomeUsuario" size=40>
e-mail: <input name="MailUsuario" size=40>
Texto: <textarea rows=5 cols=34 name="Texto"></textarea>
<input type=submit value="Enviar Formulário">
</pre>
</form>

NomeUsuario=Spider&MailUsuario=spider@aldeia.com.br&
Texto=Isto+%E9+um+exemplo+de+ coment%E1rio
|
Todos os scripts CGI deste site são "made in Aldeia". As linguagens utilizadas são principalmente PHP e alguma coisa em Perl. Faça contato: tire dúvidas, solicite matérias, critique e contribua.
|
|