Emulador de um "browser" via script CGI

Atualizado em 03/11/2008

O objetivo desta atividade é emular um navegador (browser) através de um script CGI escrito em C. O script deve ser invocado através de um formulário HTML com um campo texto contendo o endereço de uma página html qualquer (veja aqui um exemplo de formulário). Exemplos de URLs:

http://www.ic.unicamp.br/~celio/mc823-2008/homepage.html (obs: http:// é opcional)
ou
www.yahoo.com
O seu script deve então:

Teste o seu script com várias URLs e verifique que a sua saída é quase sempre igual à exibida diretamente pelo browser ao acessar a URL (exceções comuns são imagens com links locais no servidor)



(*) Você pode usar para este fim a seguinte função em C (procure entender o seu funcionamento!):
void unencode(char *src, char *last, char *dest) //decodes an URL encoded string to original form
{
 for(; src != last; src++, dest++)
   if(*src == '+')
     *dest = ' ';
   else if(*src == '%') {
     int code;
     if(sscanf(src+1, "%2x", &code) != 1) code = '?';
     *dest = code;
     src +=2; }     
   else
     *dest = *src;
 *dest = '\n';
 *++dest = '\0';
}
(**) Use para este fim as funções de tratamento de cadeias de caracteres da linguagem C. Observe que no exemplo da 2a URL, www.yahoo.com, apenas o endereço DNS do servidor web foi colocado. Nesse caso o browser assume que o documento pedido tem como caminho a raiz de documentos no servidor que é "/" (e na raiz existe um documento "default" que usualmente se chama index.html). Em outras palavras a 2a URL é tratada pelo browser como equivalente à seguinte URL: www.yahoo.com/ (onde o caminho da página requerida é "/"). Você deve fazer o mesmo no seu emulador, ao fazer o "parsing" da URL.

(***) A fim de evitar que mensagens de depuração do seu script gerem um erro interno no servidor que está executando o script (estas mensagens estão sendo redirecionadas da saída padrão para o socket conectado ao browser), logo no começo do script envie para a saída padrão a cadeia:

"Content Type: text/html\n\n"


Ambiente de programação de scripts CGI nos labs do IC

O servidor Apache da máquina agua.lab.ic.unicamp.br está configurado para executar scripts com extensão .cgi localizados no subdiretório public_html/cgi-bin dos alunos (a servidora agua.lab "monta" automaticamente os homedirs de quem tem conta nas máquinas dos laboratórios do IC3). Páginas html são usualmente colocadas no diretório public_html mas podem também ser colocadas em qualquer subdiretório do mesmo. Não deve ser escrito explicitamente numa URL para acesso a uma página html ou a um script cgi. Por exemplo se você tiver no seu diretório public_html uma página denominada minhahomepage.html você irá exibi-la via browser com a seguinte URL:
http://agua.lab.ic.unicamp.br/~meu_home_dir/minhahomepage.html
Da mesma forma para executar o script meuscript.cgi (compilado a partir de C), você usaria a URL:
http://agua.lab.ic.unicamp.br/~meu_home_dir/cgi-bin/meuscript.cgi