Latest web development tutorials

C ++ Programação Web

O que é CGI?

  • Common Gateway Interface (CGI), é um padrão que define a forma como as informações são trocadas entre o servidor Web e scripts do lado do cliente.
  • especificação CGI é atualmente mantido pelo CGI NCSA, NCSA é definido da seguinte forma:
  • Common Gateway Interface (CGI), é uma porta de entrada para programas externos com servidores de informação (como o servidor HTTP) padrão de interface de encaixe.
  • A versão atual é CGI / 1.1, CGI / versão 1.2 está avançando.

web browser

Para entender melhor o conceito de CGI, vamos clicar em um link, navegar em uma página ou URL específica, e ver o que acontece.

  • Seu navegador liga no servidor Web HTTP e solicita uma URL, ou seja, o nome do arquivo.
  • servidor Web resolve o URL, e encontrar o nome do arquivo. Se você encontrar o arquivo solicitado, o servidor Web envia o arquivo de volta para o navegador, caso contrário, envie uma mensagem de erro indicando que você está solicitando um arquivo errado.
  • navegador da Web para obter uma resposta do servidor Web, e com base na resposta recebida para exibir um arquivo ou uma mensagem de erro.

No entanto, de modo a construir um servidor HTTP, independentemente do momento de solicitar um diretório de arquivos, o servidor HTTP não está enviando de volta o arquivo, mas sob a forma de execução do programa e a implementação da saída gerada é enviada de volta para a exibição do navegador fora.

Common Gateway Interface (CGI), é fazer com que um aplicativo (chamado de programas CGI ou scripts CGI) para trabalhar com servidores Web e os clientes interagem protocolos padrão. Estes programas CGI pode usar Python, Perl, Shell, C ou C ++, etc, para se preparar.

CGI Gráfico

A ilustração a seguir mostra a arquitetura CGI:

arquitetura CGI

configuração do servidor Web

Antes de fazer a programação CGI, certifique-se de que o servidor Web suporta CGI, e foi configurado para lidar com programas CGI. Todos os programas CGI executadas pelo servidor HTTP, tem que ser directório pré-configurado. Este diretório chamado diretório CGI, por convenção chamado / var / www / cgi-bin. Apesar de arquivo executável CGI é C ++, mas por convenção, é o.cgi extensão.

Por padrão, o servidor Web Apache seria configurado para ser executado no diretório / var / www / cgi-bin no programa CGI. Se você deseja especificar outro diretório para executar scripts CGI, você pode modificar a seguinte seção no arquivo httpd.conf:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>
 
<Directory "/var/www/cgi-bin">
Options All
</Directory>

Aqui, estamos supondo que você já tem um servidor Web e pode ser executado com sucesso, você pode executar todos os programas CGI, como o Perl ou Shell e similares.

O primeiro programa CGI

Considere o seguinte programa em C ++:

#include <iostream>
using namespace std;
 
int main ()
{
    
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>Hello World - 第一个 CGI 程序</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! 这是我的第一个 CGI 程序</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Compilar o código anterior, o arquivo executável é nomeado cplusplus.cgi, e este arquivo é salvo em / var / www diretório / cgi-bin. Antes de executar o programa CGI, por favor use o755 cplusplus.cgi comando chmod UNIXpara alterar o modo de arquivo, verifique se o arquivo é executável. arquivo executável Access, você verá o seguinte resultado:

Olá mundo! Este é o meu primeiro programa CGI

O programa acima C ++ é um programa simples, é escrito em arquivo de saída STDOUT é exibida na tela. Aqui, é de salientar que a primeira linha de saída deContent-Type: text / html \ r \ n \ r \ n.Esta linha é enviada de volta para o navegador, e destinado a ser exibido no tipo de conteúdo janela do navegador. Você deve entender os conceitos básicos de CGI, de modo a utilizar mais Python para escrever programas CGI mais complexa. programa CGI C ++ pode ser usada com qualquer outro sistema externo (tal como RDBMS) para interagir.

informações de cabeçalho HTTP

LinhaContent-Type: text / html \ r \ n \ r \ n é uma parte integrante da informação do cabeçalho HTTP, ele é enviado para o navegador, a fim de melhor compreender o conteúdo da página.Sob a forma de informações de cabeçalho HTTP é a seguinte:

HTTP 字段名称: 字段内容
 
例如
Content-type: text/html\r\n\r\n

Há outras importantes informações de cabeçalho HTTP, estes serão frequentemente utilizados em sua programação CGI.

头信息 描述
Content-type: MIME 字符串,定义返回的文件格式。例如 Content-type:text/html。
Expires: Date 信息变成无效的日期。浏览器使用它来判断一个页面何时需要刷新。一个有效的日期字符串的格式应为 01 Jan 1998 12:00:00 GMT。
Location: URL 这个 URL 是指应该返回的 URL,而不是请求的 URL。你可以使用它来重定向一个请求到任意的文件。
Last-modified: Date 资源的最后修改日期。
Content-length: N 要返回的数据的长度,以字节为单位。浏览器使用这个值来表示一个文件的预计下载时间。
Set-Cookie: String 通过string设置 cookie。

Variáveis ​​CGI Ambiente

Todos os programas CGI pode acessar as seguintes variáveis ​​de ambiente. Essas variáveis ​​ao escrever programas CGI desempenham um papel muito importante.

变量名 描述
CONTENT_TYPE 内容的数据类型。当客户端向服务器发送附加内容时使用。例如,文件上传等功能。
CONTENT_LENGTH 查询的信息长度。只对 POST 请求可用。
HTTP_COOKIE 以键 & 值对的形式返回设置的 cookies。
HTTP_USER_AGENT 用户代理请求标头字段,递交用户发起请求的有关信息,包含了浏览器的名称、版本和其他平台性的附加信息。
PATH_INFO CGI 脚本的路径。
QUERY_STRING 通过 GET 方法发送请求时的 URL 编码信息,包含 URL 中问号后面的参数。
REMOTE_ADDR 发出请求的远程主机的 IP 地址。这在日志记录和认证时是非常有用的。
REMOTE_HOST 发出请求的主机的完全限定名称。如果此信息不可用,则可以用 REMOTE_ADDR 来获取 IP 地址。
REQUEST_METHOD 用于发出请求的方法。最常见的方法是 GET 和 POST。
SCRIPT_FILENAME CGI 脚本的完整路径。
SCRIPT_NAME CGI 脚本的名称。
SERVER_NAME 服务器的主机名或 IP 地址。
SERVER_SOFTWARE 服务器上运行的软件的名称和版本。

As listas a seguir todos os programas CGI variáveis ​​CGI.

#include <iostream>
#include <stdlib.h>
using namespace std;

const string ENV[ 24 ] = {                 
        "COMSPEC", "DOCUMENT_ROOT", "GATEWAY_INTERFACE",   
        "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING",             
        "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION",         
        "HTTP_HOST", "HTTP_USER_AGENT", "PATH",            
        "QUERY_STRING", "REMOTE_ADDR", "REMOTE_PORT",      
        "REQUEST_METHOD", "REQUEST_URI", "SCRIPT_FILENAME",
        "SCRIPT_NAME", "SERVER_ADDR", "SERVER_ADMIN",      
        "SERVER_NAME","SERVER_PORT","SERVER_PROTOCOL",     
        "SERVER_SIGNATURE","SERVER_SOFTWARE" };   

int main ()
{
    
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 环境变量</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";

   for ( int i = 0; i < 24; i++ )
   {
       cout << "<tr><td>" << ENV[ i ] << "</td><td>";
       // 尝试检索环境变量的值
       char *value = getenv( ENV[ i ].c_str() );  
       if ( value != 0 ){
         cout << value;                                 
       }else{
         cout << "环境变量不存在。";
       }
       cout << "</td></tr>\n";
   }
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

biblioteca C ++ CGI

Em um exemplo real, você precisa realizar muitas operações por programas CGI. Existe um programa projetado especificamente para a biblioteca CGI C ++ escrita, podemos ftp://ftp.gnu.org/gnu/cgicc/~~V baixar esta biblioteca CGI, a biblioteca e instalado de acordo com as seguintes etapas:

$tar xzf cgicc-X.X.X.tar.gz 
$cd cgicc-X.X.X/ 
$./configure --prefix=/usr 
$make
$make install

Você pode clicar no C ++ CGI Lib Documentação , visualizar documentos da biblioteca.

Métodos GET e POST

Você pode ter encontrado uma tal situação, quando você precisa para passar algumas informações do navegador para o servidor Web e, finalmente, passado para o programa CGI. Normalmente navegadores são duas maneiras de usar essas informações para o servidor Web são métodos GET e POST.

Use o método GET para passar informações

GET método para enviar as informações do usuário codificado anexado ao pedido de página. Páginas e informações codificadas separados por personagem, como segue ?:

http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2

método GET é o método padrão do navegador para a transferência de informações do servidor Web, é uma longa seqüência de string é gerada na barra de endereços do navegador. Quando uma senha ou outras informações confidenciais que você passa para o servidor, não use o método GET. método GET é limitado em tamanho, em uma seqüência de solicitação de transferência de até 1024 caracteres.

Quando você usa o método GET é usar o cabeçalho http QUERY_STRING para transmitir informações, use a variável de ambiente QUERY_STRING em programas CGI para o acesso.

Você pode manter-se com a chave na URL de conexão simples, você também pode usar o método GET HTML <form> tag para transmitir informações.

Simples Exemplos de URL: método GET

Aqui está uma URL simples, usando o método GET para passar dois valores para hello_get.py programa.

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

Os exemplos a seguir geram programaCGI cpp_get.cgi para processar a entrada dada pelo navegador da Web.Ao usar a biblioteca C ++ CGI, você pode facilmente acessar a transmissão de informações:

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>  

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
   
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>使用 GET 和 POST 方法</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "名:" << **fi << endl;  
   }else{
      cout << "No text entered for first name" << endl;  
   }
   cout << "<br/>\n";
   fi = formData.getElement("last_name");  
   if( !fi->isEmpty() &&fi != (*formData).end()) {  
      cout << "姓:" << **fi << endl;  
   }else{
      cout << "No text entered for last name" << endl;  
   }
   cout << "<br/>\n";

   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Agora, compilar o programa acima da seguinte forma:

$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc

Gerar cpp_get.cgi, e colocá-lo no diretório CGI e tente acessar o seguinte link:

/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI

Isto produz os seguintes resultados:

名:ZARA 
姓:ALI 

Exemplos de forma simples: método GET

Aqui está um exemplo simples, usando formulários HTML e enviar botão passa os dois valores. Vamos usar o mesmo cpp_get.cgi script CGI para processar a entrada.

<form action="/cgi-bin/cpp_get.cgi" method="get">
名:<input type="text" name="first_name">  <br />
 
姓:<input type="text" name="last_name" />
<input type="submit" value="提交" />
</form>

Aqui está a saída real do formulário, insira o primeiro e último nome, em seguida, clique no botão de envio para ver os resultados.

Usando o método POST para transmitir informações

Um método mais fiável de passar informações para o programa CGI é o método POST. Este método de embalagem de informações com o método GET da mesma forma, exceto que ele não é a mensagem como uma cadeia de texto na URL? Depois de ser passado, mas colocá-lo em uma mensagem separada, sob a forma de entrega. A mensagem é passada para o padrão de entrada sob a forma de programas CGI.

Nós também usamos cpp_get.cgi para lidar com o método POST. Vamos dar o mesmo exemplo, para passar através do uso de formulários HTML e enviar dois valores de botão, mas desta vez não estamos usando o método GET, mas o método POST, como segue:

<form action="/cgi-bin/cpp_get.cgi" method="post">
名:<input type="text" name="first_name"><br />
姓:<input type="text" name="last_name" />
 
<input type="submit" value="提交" />
</form>

programa CGI para passar dados para a caixa

Quando você precisa selecionar várias opções, estamos usando as caixas de seleção.

O seguinte exemplo de código HTML é uma forma com duas caixas de seleção:

<form action="/cgi-bin/cpp_checkbox.cgi" 
         method="POST" 
         target="_blank">
<input type="checkbox" name="maths" value="on" /> 数学
<input type="checkbox" name="physics" value="on" /> 物理
<input type="submit" value="选择学科" />
</form>

O seguinte programa C ++ irá gerar roteiro cpp_checkbox.cgi para lidar com navegador Web inserindo a caixa dada.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
   bool maths_flag, physics_flag;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递复选框数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   maths_flag = formData.queryCheckbox("maths");
   if( maths_flag ) {  
      cout << "Maths Flag: ON " << endl;  
   }else{
      cout << "Maths Flag: OFF " << endl;  
   }
   cout << "<br/>\n";

   physics_flag = formData.queryCheckbox("physics");
   if( physics_flag ) {  
      cout << "Physics Flag: ON " << endl;  
   }else{
      cout << "Physics Flag: OFF " << endl;  
   }
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Transferir os dados para o programa CGI o botão de rádio

Quando só precisa selecionar uma opção, usamos botões de rádio.

O seguinte exemplo de código HTML é um formulário com dois botões de opção:

<form action="/cgi-bin/cpp_radiobutton.cgi" 
         method="post" 
         target="_blank">
<input type="radio" name="subject" value="maths" 
                                    checked="checked"/> 数学 
<input type="radio" name="subject" value="physics" /> 物理
<input type="submit" value="选择学科" />
</form>

O seguinte programa C ++ irá gerar roteiro cpp_radiobutton.cgi para lidar com o navegador da Web de entrada através do botão de rádio de.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递单选按钮数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("subject");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Radio box selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Transferir dados para uma área de texto programa CGI

programa CGI quando você precisa transferir várias linhas de texto, usamos o elemento TEXTAREA.

O seguinte exemplo de código HTML é uma forma com a caixa TEXTAREA:

<form action="/cgi-bin/cpp_textarea.cgi" 
         method="post" 
         target="_blank">
<textarea name="textcontent" cols="40" rows="4">
请在这里输入文本...
</textarea>
<input type="submit" value="提交" />
</form>

O seguinte programa C ++ irá gerar roteiro cpp_textarea.cgi para lidar com a entrada dada pelo navegador da Web, a área de texto.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递文本区域数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("textcontent");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Text Content: " << **fi << endl;  
   }else{
      cout << "No text entered" << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

caixa drop-down para passar dados para o programa CGI

Quando existem várias opções disponíveis, mas só pode escolher uma ou duas opções, usamos caixa drop-down.

O seguinte exemplo de código HTML é uma forma com uma caixa drop-down:

<form action="/cgi-bin/cpp_dropdown.cgi" 
                       method="post" target="_blank">
<select name="dropdown">
<option value="Maths" selected>数学</option>
<option value="Physics">物理</option>
</select>
<input type="submit" value="提交"/>
</form>

O seguinte programa C ++ irá gerar roteiro cpp_dropdown.cgi para lidar com o navegador da Web de entrada através da caixa drop-down dado.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc formData;
  
   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>向 CGI 程序传递下拉框数据</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("dropdown");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "Value Selected: " << **fi << endl;  
   }
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Use cookies no CGI,

protocolo HTTP é um protocolo sem estado. Mas para um site de negócios, ele precisa manter as informações sessão entre diferentes páginas. Por exemplo, um usuário após a conclusão de várias etapas terminar página de registo. No entanto, como manter informações de sessão do usuário em cada página.

Em muitos casos, o uso de cookies é lembrar e rastrear informações sobre as preferências do usuário, compra, comissão e outro método mais eficaz para a busca de uma melhor experiência de visitante ou site de informações estatísticas necessárias.

Como funciona

Servidor na forma de um cookie para enviar alguns dados para o navegador do visitante. Se o navegador aceita o cookie, o cookie será armazenado como texto simples gravado no disco rígido de um visitante. Agora, quando os visitantes para outra página no site, recupera o cookie. Depois de encontrar o cookie, o servidor vai saber o que está armazenado.

Um cookie é um puro registros de dados de texto, cinco campos de comprimento variável com:

  • Expira: biscoito data de validade.Se este campo for deixado em branco, cookie expirará quando o visitante sai do browser.
  • Domínio: nome de domínio do site.
  • Path: Define a pasta de bolinho caminho ou página.Se você quiser recuperar o cookie de qualquer diretório ou página, este campo pode ser deixado em branco.
  • Seguro: Se este campo contém a palavra "seguro", então o cookie pode ser recuperada através de um servidor seguro.Se este campo for deixado em branco, que não existem restrições.
  • Name = Valor: bolinho na forma de pares chave-valor a ser definido e obter.

definindo cookies

Enviar cookies para o navegador é muito simples. Esses 'cookies' serão antes do campo de tipo de conteúdo e cabeçalhos HTTP para ser enviado junto. Suponha que você queira definir UserID e senha para os cookies, definir cookies etapas são as seguintes:

#include <iostream>
using namespace std;

int main ()
{
 
   cout << "Set-Cookie:UserID=XYZ;\r\n";
   cout << "Set-Cookie:Password=XYZ123;\r\n";
   cout << "Set-Cookie:Domain=www.w3cschool.cc;\r\n";
   cout << "Set-Cookie:Path=/perl;\n";
   cout << "Content-type:text/html\r\n\r\n";

   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   cout << "设置 cookies" << endl;  
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

A partir deste exemplo, nós aprendemos como definir cookies. Nós usamos o cabeçalhoHTTP Set-Cookie para definir cookies.

Aqui estão algumas propriedades para definir cookies é opcional, como expirar, domínio e caminho. Vale a pena notar, os cookies são enviados na linha"Content-Type: text / html \ r \ n \ r \ nantes de ser definido.

Compilar o programa acima que gera setcookies.cgi, e tentar usar a seguinte ligação para definir cookies. Ele irá definir-se quatro cookies no seu computador:

/cgi-bin/setcookies.cgi

obter cookies

cookies para recuperar todas as configurações são muito simples. biscoitos são armazenados em variáveis ​​de ambiente do CGI HTTP_COOKIE, e a sua forma é armazenado como segue:

key1=value1;key2=value2;key3=value3....

O exemplo a seguir mostra como obter cookies.

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc cgi;
   const_cookie_iterator cci;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的 Cookies</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // 获取环境变量
   const CgiEnvironment& env = cgi.getEnvironment();

   for( cci = env.getCookieList().begin();
        cci != env.getCookieList().end(); 
        ++cci )
   {
      cout << "<tr><td>" << cci->getName() << "</td><td>";
      cout << cci->getValue();                                 
      cout << "</td></tr>\n";
   }
   cout << "</table><\n";
  
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Agora, compilar o programa acima gera getcookies.cgi, e tentar usar o seguinte link para obter todos os cookies disponíveis no seu computador:

/cgi-bin/getcookies.cgi

Isto irá produzir uma lista que mostra todos os outros quatro biscoitos bolinhos em um set e seu computador:

UserID XYZ 
Password XYZ123 
Domain www.w3cschool.cc 
Path /perl 

Exemplos de upload de arquivos

Para fazer upload de um arquivo, formulário HTML deve ENCTYPE atributo definido comomultipart / form-data.tag de entrada com o tipo de arquivo irá criar um botão "Browse".

<html>
<body>
   <form enctype="multipart/form-data" 
            action="/cgi-bin/cpp_uploadfile.cgi" 
            method="post">
   <p>文件:<input type="file" name="userfile" /></p>
   <p><input type="submit" value="上传" /></p>
   </form>
</body>
</html>

Os resultados deste código é a seguinte forma:

documentos:

Nota: O exemplo acima foi deliberadamente desabilitada no salvos em nossos servidores para carregar arquivos.Você pode tentar o código acima no seu servidor.

A seguir são utilizados para processar ocpp_uploadfile.cpp script de upload de arquivos:

#include <iostream>
#include <vector>  
#include <string>  
#include <stdio.h>  
#include <stdlib.h> 

#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h>

using namespace std;
using namespace cgicc;

int main ()
{
   Cgicc cgi;

   cout << "Content-type:text/html\r\n\r\n";
   cout << "<html>\n";
   cout << "<head>\n";
   cout << "<title>CGI 中的文件上传</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // 获取要被上传的文件列表
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // 在 cout 中发送数据类型
      cout << HTTPContentHeader(file->getDataType());
      // 在 cout 中写入内容
      file->writeToStream(cout);
   }
   cout << "<文件上传成功>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

O exemplo acima é de escrever paracout fluxo, mas você pode abrir o fluxo de arquivo, e o conteúdo do arquivo carregado em um arquivo no local de destino.