3630 registros
0 hoje
14 nesta semana
4 neste mês|
Seg 17 Nov 2008 18:20 |
|
|
Meus mais sinceros agradecimentos a Stefan Münz, principal fonte de referência para este tutorial e autor de todos os exemplos nele contidos. Seu livro sobre HTML, escrito em alemão, é um dos melhores (senão o melhor) que já encontrei e está à disposição na web gratuitamente com uma boa parte já traduzida para o inglês. O que é CGIO termo CGI vem de Common Gateway Interface. É apenas uma outra designação para o que conhecemos como API (Application Programming Interface). Resumo da história, a CGI é apenas uma API para o servidor web. O servidor web, por sua vez, é o software que envia páginas web para os browsers (navegadores como o Internet Explorer, Firefox ou Netscape). Tecnicamente, os navegadores deveriam ser chamados de clientes web e, as pessoas que os utilizam, deveriam ser chamadas de navegadores. Mas deixa pra lá... Encontra-se muita informação a respeito da CGI na Internet porém, na maioria das vezes, desencontrada e cheia de mitos e preconceitos. Vamos esclarecer algumas dúvidas relatando o que não é a CGI... A CGI não é...... não é uma linguagem de programação: isto significa que você pode usar qualquer linguagem da sua escolha para escrever um programa CGI. É claro que a linguagem escolhida precisa ser capaz de ler um "input" e escrever um "output". Você conhece alguma linguagem de programação que não ofereça tais possibilidades? ...não necessita da linguagem PERL. A PERL pode ser usada assim como qualquer outra linguagem, como PHP, C, Phyton, Object Pascal, etc. ... não é apenas para especialistas em sistemas UNIX. Aliás, não há necessidade de ser especialista algum, noções básicas de programação são mais do que suficientes. ... não é um estilo de programação. Use seu estilo próprio, pois apenas com "input" e "output" podemos fazer com que o servidor web "converse" com a CGI. O que faz um servidor webParece brincadeira, mas um servidor web apenas espera - a não ser que o site esteja sendo maciçamente acessado. O que o servidor web fica esperando nada mais é do que um cliente, um navegador que solicite um arquivo. Este arquivo pode ser uma página HTML, uma imagem ou qualquer outro tipo de arquivo. Quando o servidor web recebe uma solicitação, realiza três tarefas na seguinte ordem:
Como o servidor web envia arquivosUm de cada vez. Por incrível que pareça, apenas UM de cada vez. Sabemos que uma página de web típica é constituída por um documento HTML e por algumas imagens. Cada um deles é um arquivo diferente que precisa ser enviado ao navegador. Como o servidor web envia apenas UM arquivo por vez, o navegador precisa iniciar uma nova sessão (solicitação) para cada um dos arquivos de que necessite. Ainda bem que, tanto o servidor web quanto o navegador, são multi-tarefa. O navegador pode solicitar vários arquivos simultaneamente e o servidor web pode enviar vários arquivos simultaneamente, porém, para cada um dos arquivos solicitados-enviados é necessária UMA SESSÃO própria. O servidor web só é capaz de enviar arquivos?Não necessariamente. Na verdade, o que ocorre é apenas uma transferência de dados. Lembre-se de que o servidor e o cliente (o navegador) geralmente são executados em computadores diferentes. Eles podem até usar sistemas operacionais diferentes em máquinas com microprocessadores diferentes. O navegador apenas solicita um "recurso" e não sabe, nem precisa saber, de onde o servidor obtém os dados. Entretanto, um servidor típico está programado para obter seus dados de arquivos. Ele simplesmente lê os dados do arquivo e os transmite para o cliente. Como resultado deste processo, o servidor envia apenas dados estáticos, ou seja, o servidor não altera dinamicamente os dados enviados. O que fazer para enviar dados dinâmicos?Não é nada difícil. A CGI foi projetada justamente para cumprir esta função. Você simplesmente escreve um programa que produz dados dinamicamente e estes dados, ao invés de um arquivo, são enviados para o navegador. Esta é a maneira como um programa CGI amplia a funcionalidade de um servidor, da mesma forma que, por exemplo, uma DLL amplia a funcionalidade do Windows. Mas tem uma grande diferença: a CGI é muitíssimo mais simples de escrever do que qualquer coisa para o Windows. Mas, como falar com o navegador?Não há necessidade de se falar com o navegador. É o servidor que faz este trabalho. O melhor da brincadeira é que você nem mesmo precisa falar com o servidor. Tudo o que você tem a fazer é escrever para uma saída padrão (standart output). Da mesma forma como, por exemplo, você usa o printf() da linguagem C. A única coisa que não se pode perder de vista é a sequência das três tarefas realizadas pelo servidor numa transmissão de dados (citada acima). Uma vez que o servidor desconhece o tipo de dado que você estará enviando, você precisa suprir a saída padrão com esta informação. Também foi dito que você pode usar seu estilo próprio. Pois vamos lá: suponha que seu servidor esteja rodando sob DOS. A bem da verdade, não existe nenhum servidor assim mas... existem servidores Windows e o Windows pode interpretar comandos do MS DOS. Sendo assim, imagine que você queira enviar uma lista do seu diretório corrente para a web (não é uma boa idéia, mas mostra como essa tarefa é simples). O MS DOS também tem o comando dir que envia a listagem de diretórios para a saída padrão. Então, teoricamente, poderíamos produzir o seguinte script:
1a. Tarefa: identificar o tipo de dados que serão enviados
echo Content-type: text/plain
2a. Tarefa: enviar uma linha em branco
echo
3a. Tarefa: enviar o conteúdo
dir
O exemplo acima é apenas uma simulação de como funciona um script CGI usando elementos que a maioria das pessoas conhece. Foi citado apenas para entender o princípio de um output (saída) e não para funcionar de verdade. Agora, mais um passo... Como conseguir um input (uma entrada)?Primeiramente precisa ficar bem claro que a web NÃO é interativa. Isto significa que seu programa CGI não pode solicitar entradas (input) dos usuários, processá-las, enviar algum resultado (output), pedir mais um input, processá-lo e assim por diante. É justamente por isso que a programação de uma CGI é muito simples. O programa recebe entradas do usuário apenas uma vez, logo no início, e envia apenas uma resposta (output). Entretanto, tanto a entrada quanto a resposta podem ter qualquer tamanho e complexidade, dependendo do que seu programa possa comportar. Dito isto, você precisa saber que seu programa pode receber uma entrada do usuário de duas maneiras, dependendo do método que o navegador usar para enviá-lo ao servidor. Onde o navegador acha o input do usuário?O navegador aceita entradas usando formulários HTML (forms). Um formulário pode instruir o navegador para enviar dados através de dois métodos: GET e POST. O método GET envia as entradas como parte da URL. O método POST envia as entradas como stdin. O segundo método parece ter algumas vantagens:
Como saber qual método está sendo usado?O servidor web, antes de carregar seu programa CGI, inicializa algumas variáveis de contexto. Você pode analisar estas variáveis para saber a quantidade e a origem dos dados de entrada (input). Uma das variáveis de contexto é a REQUEST_METHOD. Seu valor pode ser POST, GET e, eventualmente, HEAD. Se REQUEST_METHOD indicar POST, a variável CONTENT_LENGTH indicará quantos bytes de dados deverão ser lidos através de stdin e a variável CONTENT_TYPE indicará que os dados se originam de um formulário (ou de outra fonte qualquer). Assim que os dados tenham sido recebidos (lidos pelo servidor), podem ser imediatamente processados e a resposta (output) pode ser enviada através de um stdout. Geralmente a resposta é escrita na forma de dados HTML, com toda a formatação necessária. Mas programas CGI podem produzir qualquer tipo de resposta, como um arquivo GIF ou qualquer outra coisa. Este é o motivo pelo qual você precisa indicar ao navegador, nas 2 primeiras etapas da transmissão, o tipo de dado que será enviado. Podemos identificar dados de HTML enviando a string Content-type: text/html (tarefa 1) seguida de uma string vazia (tarefa 2). Usando a linguagem C seria printf("Content-type: text/html\n\n"); onde \n é quebra de linha e o segundo \n outra quebra de linha para indicar a linha vazia. Usando PERL seria print "Content-type: text/html\n\n"; |
| Última atualização ( Seg, 17.11.2008 19:29 ) |