Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Programação Web C++

O que é CGI?

Navegação na Web


Para entender o conceito de CGI, vamos ver o que acontece quando clicamos em um hiperlink para navegar em uma determinada página da web ou URL.

No entanto, é possível configurar o servidor HTTP de forma que sempre que um arquivo em um determinado diretório for solicitado, esse arquivo não seja devolvido; em vez disso, ele é executado como um programa, e a saída produzida do programa é enviada de volta ao seu navegador para exibição.

O Common Gateway Interface (CGI) é um protocolo padrão para permitir que aplicativos (chamados programas CGI ou scripts CGI) interajam com servidores Web e clientes. Esses programas CGI podem ser escritos em Python, PERL, Shell, C ou C++ etc.

Diagrama de arquitetura CGI


O programa simples a seguir mostra uma arquitetura simples de CGI -

Configuração do servidor Web


Antes de prosseguir com a Programação CGI, certifique-se de que seu Servidor Web suporte CGI e esteja configurado para lidar com Programas CGI. Todos os Programas CGI a serem executados pelo servidor HTTP são mantidos em um diretório pré-configurado. Esse diretório é chamado de diretório CGI e, por convenção, é nomeado como /var/www/cgi-bin. Por convenção, os arquivos CGI terão extensão como .cgi , embora sejam executáveis ​​em C++.

Por padrão, o Apache Web Server é configurado para executar programas CGI em /var/www/cgi-bin. Se você deseja especificar qualquer outro diretório para executar seus scripts CGI, você pode modificar a seção a seguir 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, suponho que você tenha o Web Server instalado e funcionando com sucesso e seja capaz de executar qualquer outro programa CGI, como Perl ou Shell, etc.

Primeiro Programa CGI


Considere o seguinte conteúdo do programa 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 - First CGI Program</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<h2>Hello World! This is my first CGI program</h2>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Compile o código acima e nomeie o executável como cplusplus.cgi. Este arquivo está sendo mantido no diretório /var/www/cgi-bin e possui o seguinte conteúdo. Antes de executar seu programa CGI, certifique-se de ter alterado o modo de arquivo usando chmod 755 cplusplus.cgi Comando UNIX para tornar o arquivo executável.

Meu primeiro programa CGI


O programa C++ acima é um programa simples que está escrevendo sua saída no arquivo STDOUT, ou seja, na tela. Há um recurso importante e extra disponível que é a impressão de primeira linha Content-type:text/html\r\n\r\n . Esta linha é enviada de volta ao navegador e especifica o tipo de conteúdo a ser exibido na tela do navegador. Agora você deve ter entendido o conceito básico de CGI e pode escrever muitos programas CGI complicados usando Python. Um programa CGI C++ pode interagir com qualquer outro sistema externo, como RDBMS, para trocar informações.

Cabeçalho HTTP


A linha Content-type:text/html\r\n\r\n é uma parte do cabeçalho HTTP, que é enviado ao navegador para entender o conteúdo. Todo o cabeçalho HTTP estará no seguinte formato -
HTTP Field Name: Field Content
 
For Example
Content-type: text/html\r\n\r\n

Existem alguns outros cabeçalhos HTTP importantes, que você usará frequentemente em sua programação CGI.
Sr.Nº Cabeçalho e descrição
1
Tipo de conteúdo:

Uma string MIME que define o formato do arquivo que está sendo retornado. O exemplo é Content-type:text/html.
2
Expira:Data

A data em que a informação se torna inválida. Isso deve ser usado pelo navegador para decidir quando uma página precisa ser atualizada. Uma string de data válida deve estar no formato 01 de janeiro de 1998 12:00:00 GMT.
3
Local:URL

A URL que deve ser retornada em vez da URL solicitada. Você pode usar este arquivo para redirecionar uma solicitação para qualquer arquivo.
4
Última modificação:data

A data da última modificação do recurso.
5
Tamanho do conteúdo:N

O comprimento, em bytes, dos dados que estão sendo retornados. O navegador usa esse valor para relatar o tempo estimado de download de um arquivo.
6
Set-Cookie:String

Defina o cookie passado pela string .

Variáveis ​​de ambiente CGI


Todo o programa CGI terá acesso às seguintes variáveis ​​de ambiente. Essas variáveis ​​desempenham um papel importante ao escrever qualquer programa CGI.
Sr.Nº Nome e descrição da variável
1
CONTENT_TYPE

O tipo de dados do conteúdo, usado quando o cliente está enviando conteúdo anexado ao servidor. Por exemplo, upload de arquivo etc.
2
CONTENT_LENGTH

O comprimento das informações de consulta que estão disponíveis apenas para solicitações POST.
3
HTTP_COOKIE

Retorna os cookies definidos na forma de par de chave e valor.
4
HTTP_USER_AGENT

O campo de cabeçalho de solicitação do User-Agent contém informações sobre o agente do usuário que originou a solicitação. É um nome do navegador da web.
5
PATH_INFO

O caminho para o script CGI.
6
QUERY_STRING

As informações codificadas por URL que são enviadas com a solicitação do método GET.
7
REMOTE_ADDR

O endereço IP do host remoto que está fazendo a solicitação. Isso pode ser útil para log ou para fins de autenticação.
8
REMOTE_HOST

O nome completo do host que está fazendo a solicitação. Se esta informação não estiver disponível, REMOTE_ADDR pode ser usado para obter o endereço IR.
9
REQUEST_METHOD

O método usado para fazer a solicitação. Os métodos mais comuns são GET e POST.
10
SCRIPT_FILENAME

O caminho completo para o script CGI.
11
SCRIPT_NAME

O nome do script CGI.
12
SERVER_NAME

O nome de host ou endereço IP do servidor.
13
SERVER_SOFTWARE

O nome e a versão do software que o servidor está executando.

Aqui está um pequeno programa CGI para listar todas as 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 Environment Variables</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>";
      
      // attempt to retrieve value of environment variable
      char *value = getenv( ENV[ i ].c_str() );  
      if ( value != 0 ) {
         cout << value;                                 
      } else {
         cout << "Environment variable does not exist.";
      }
      cout << "</td></tr>\n";
   }
   
   cout << "</table><\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Biblioteca CGI C++


Para exemplos reais, você precisaria fazer muitas operações pelo seu programa CGI. Existe uma biblioteca CGI escrita para o programa C++ que você pode baixar em ftp://ftp.gnu.org/gnu/cgicc/ e siga os passos para instalar a biblioteca −
$tar xzf cgicc-X.X.X.tar.gz 
$cd cgicc-X.X.X/ 
$./configure --prefix=/usr 
$make
$make install

Você pode verificar a documentação relacionada disponível em ‘C++ CGI Lib Documentation.

Métodos GET e POST


Você já deve ter se deparado com muitas situações em que precisa passar algumas informações do seu navegador para o servidor web e, finalmente, para o seu Programa CGI. O navegador mais frequentemente usa dois métodos para passar essas informações para o servidor web. Esses métodos são o Método GET e o Método POST.

Passando informações usando o método GET


O método GET envia as informações codificadas do usuário anexadas à solicitação de página. A página e as informações codificadas são separadas por ? caractere da seguinte forma -
http://www.test.com/cgi-bin/cpp.cgi?key1=value1&key2=value2

O método GET é o método padrão para passar informações do navegador para o servidor web e produz uma longa string que aparece na caixa Location:do seu navegador. Nunca use o método GET se você tiver senha ou outras informações confidenciais para passar para o servidor. O método GET tem limitação de tamanho e você pode passar até 1024 caracteres em uma string de solicitação.

Ao usar o método GET, as informações são passadas usando o cabeçalho HTTP QUERY_STRING e estarão acessíveis em seu programa CGI por meio da variável de ambiente QUERY_STRING.

Você pode passar informações simplesmente concatenando pares de chave e valor junto com qualquer URL ou você pode usar tags HTML
para passar informações usando o método GET.

Exemplo de URL simples:método Get


Aqui está uma URL simples que passará dois valores para o programa hello_get.py usando o método GET.
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI
Abaixo está um programa para gerar cpp_get.cgi Programa CGI para manipular a entrada fornecida pelo navegador da web. Vamos usar a biblioteca CGI C++ que torna muito fácil acessar as informações passadas −
#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>Using GET and POST Methods</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   form_iterator fi = formData.getElement("first_name");  
   if( !fi->isEmpty() && fi != (*formData).end()) {  
      cout << "First name: " << **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 << "Last name: " << **fi << endl;  
   } else {
      cout << "No text entered for last name" << endl;  
   }
   
   cout << "<br/>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

Agora, compile o programa acima da seguinte forma -
$g++ -o cpp_get.cgi cpp_get.cpp -lcgicc

Gere cpp_get.cgi e coloque-o em seu diretório CGI e tente acessar usando o seguinte link -
/cgi-bin/cpp_get.cgi?first_name=ZARA&last_name=ALI
Isso geraria o seguinte resultado -
First name: ZARA 
Last name: ALI 

Exemplo de FORM simples:Método GET


Aqui está um exemplo simples que passa dois valores usando HTML FORM e botão enviar. Vamos usar o mesmo script CGI cpp_get.cgi para lidar com esta entrada.
<form action = "/cgi-bin/cpp_get.cgi" method = "get">
   First Name: <input type = "text" name = "first_name">  <br />
 
   Last Name: <input type = "text" name = "last_name" />
   <input type = "submit" value = "Submit" />
</form>

Aqui está a saída real do formulário acima. Você digita Nome e Sobrenome e clica no botão enviar para ver o resultado.

Passando informações usando o método POST


Um método geralmente mais confiável de passar informações para um programa CGI é o método POST. Isso empacota as informações exatamente da mesma maneira que os métodos GET, mas em vez de enviá-las como uma string de texto após um ? na URL, ele a envia como uma mensagem separada. Esta mensagem chega ao script CGI na forma de entrada padrão.

O mesmo programa cpp_get.cgi manipulará o método POST também. Vamos pegar o mesmo exemplo acima, que passa dois valores usando HTML FORM e botão de envio, mas desta vez com o método POST da seguinte forma −
<form action = "/cgi-bin/cpp_get.cgi" method = "post">
   First Name: <input type = "text" name = "first_name"><br />
   Last Name: <input type = "text" name = "last_name" />
 
   <input type = "submit" value = "Submit" />
</form>

Aqui está a saída real do formulário acima. Você digita Nome e Sobrenome e clica no botão enviar para ver o resultado.

Passando dados da caixa de seleção para o programa CGI


As caixas de seleção são usadas quando é necessário selecionar mais de uma opção.

Aqui está um exemplo de código HTML para um formulário com duas caixas de seleção -
<form action = "/cgi-bin/cpp_checkbox.cgi" method = "POST" target = "_blank">
   <input type = "checkbox" name = "maths" value = "on" /> Maths
   <input type = "checkbox" name = "physics" value = "on" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

O resultado deste código é a seguinte forma -

Abaixo está o programa C++, que irá gerar o script cpp_checkbox.cgi para manipular a entrada fornecida pelo navegador web através do botão checkbox.
#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>Checkbox Data to 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;
}

Passando dados do botão de rádio para o programa CGI


Os botões de opção são usados ​​quando apenas uma opção precisa ser selecionada.

Aqui está um exemplo de código HTML para 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"/> Maths 
   <input type = "radio" name = "subject" value = "physics" /> Physics
   <input type = "submit" value = "Select Subject" />
</form>

O resultado deste código é a seguinte forma -

Abaixo está o programa C++, que irá gerar o script cpp_radiobutton.cgi para manipular a entrada fornecida pelo navegador da web através dos botões de opção.
#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>Radio Button Data to 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;
}

Passando dados da área de texto para o programa CGI


O elemento TEXTAREA é usado quando o texto de várias linhas deve ser passado para o programa CGI.

Aqui está um exemplo de código HTML para um formulário com uma caixa TEXTAREA -
<form action = "/cgi-bin/cpp_textarea.cgi" method = "post" target = "_blank">
   <textarea name = "textcontent" cols = "40" rows = "4">
      Type your text here...
   </textarea>
   <input type = "submit" value = "Submit" />
</form>

O resultado deste código é a seguinte forma -

Abaixo está o programa C++, que irá gerar o script cpp_textarea.cgi para manipular a entrada fornecida pelo navegador da web através da á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>Text Area Data to 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;
}

Passando dados da caixa suspensa para o programa CGI


A caixa suspensa é usada quando temos muitas opções disponíveis, mas apenas uma ou duas serão selecionadas.

Aqui está um exemplo de código HTML para um formulário com uma caixa suspensa -
<form action = "/cgi-bin/cpp_dropdown.cgi" method = "post" target = "_blank">
   <select name = "dropdown">
      <option value = "Maths" selected>Maths</option>
      <option value = "Physics">Physics</option>
   </select>
   
   <input type = "submit" value = "Submit"/>
</form>

O resultado deste código é a seguinte forma -

Abaixo está o programa C++, que irá gerar o script cpp_dropdown.cgi para manipular a entrada fornecida pelo navegador da web através da caixa suspensa.
#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>Drop Down Box Data to 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;
}

Usando cookies em CGI


O protocolo HTTP é um protocolo sem estado. Mas para um site comercial é necessário manter as informações da sessão entre as diferentes páginas. Por exemplo, o registro de um usuário termina após a conclusão de muitas páginas. Mas como manter as informações da sessão do usuário em todas as páginas da web.

Em muitas situações, o uso de cookies é o método mais eficiente de lembrar e rastrear preferências, compras, comissões e outras informações necessárias para uma melhor experiência do visitante ou estatísticas do site.

Como funciona


Seu servidor envia alguns dados para o navegador do visitante na forma de um cookie. O navegador pode aceitar o cookie. Se isso acontecer, ele será armazenado como um registro de texto simples no disco rígido do visitante. Agora, quando o visitante chega a outra página do seu site, o cookie fica disponível para recuperação. Uma vez recuperado, seu servidor sabe/lembra o que foi armazenado.

Cookies são um registro de dados de texto simples de 5 campos de comprimento variável -

  • Expira − Isso mostra a data em que o cookie expirará. Se estiver em branco, o cookie expirará quando o visitante sair do navegador.

  • Domínio − Isso mostra o nome de domínio do seu site.

  • Caminho − Isso mostra o caminho para o diretório ou página da web que definiu o cookie. Pode ficar em branco se você quiser recuperar o cookie de qualquer diretório ou página.

  • Seguro − Se este campo contiver a palavra "seguro", o cookie só poderá ser recuperado com um servidor seguro. Se este campo estiver em branco, não existe tal restrição.

  • Nome =Valor − Os cookies são definidos e recuperados na forma de pares de chave e valor.

Configurando cookies


É muito fácil enviar cookies para o navegador. Esses cookies serão enviados junto com o cabeçalho HTTP antes do preenchimento do tipo de conteúdo. Supondo que você queira definir UserID e Password como cookies. Então a configuração de cookies será feita da seguinte forma
#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.tutorialspoint.com;\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>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

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

A partir deste exemplo, você deve ter entendido como definir cookies. Usamos Set-Cookie Cabeçalho HTTP para definir cookies.

Aqui, é opcional definir atributos de cookies como Expires, Domain e Path. É notável que os cookies sejam definidos antes do envio da linha mágica "Content-type:text/html\r\n\r\n .

Compile o programa acima para produzir setcookies.cgi e tente definir cookies usando o seguinte link. Ele definirá quatro cookies em seu computador -

/cgi-bin/setcookies.cgi

Recuperando cookies


É fácil recuperar todos os cookies definidos. Os cookies são armazenados na variável de ambiente CGI HTTP_COOKIE e terão o seguinte formato.
key1 = value1; key2 = value2; key3 = value3....

Aqui está um exemplo de como recuperar 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>Cookies in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";
   cout << "<table border = \"0\" cellspacing = \"2\">";
   
   // get environment variables
   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, compile o programa acima para produzir getcookies.cgi e tente obter uma lista de todos os cookies disponíveis em seu computador −

/cgi-bin/getcookies.cgi

Isso produzirá uma lista de todos os quatro cookies definidos na seção anterior e todos os outros cookies definidos em seu computador -
UserID XYZ 
Password XYZ123 
Domain www.tutorialspoint.com 
Path /perl 

Exemplo de upload de arquivo


Para fazer upload de um arquivo, o formulário HTML deve ter o atributo enctype definido como multipart/form-data . A tag de entrada com o tipo de arquivo criará um botão "Procurar".
<html>
   <body>
      <form enctype = "multipart/form-data" action = "/cgi-bin/cpp_uploadfile.cgi"
         method = "post">
         <p>File: <input type = "file" name = "userfile" /></p>
         <p><input type = "submit" value = "Upload" /></p>
      </form>
   </body>
</html>

O resultado deste código é a seguinte forma -

Observação − O exemplo acima foi desativado intencionalmente para impedir que as pessoas enviassem arquivos em nosso servidor. Mas você pode tentar o código acima com seu servidor.

Aqui está o script cpp_uploadfile.cpp para lidar com o 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>File Upload in CGI</title>\n";
   cout << "</head>\n";
   cout << "<body>\n";

   // get list of files to be uploaded
   const_file_iterator file = cgi.getFile("userfile");
   if(file != cgi.getFiles().end()) {
      // send data type at cout.
      cout << HTTPContentHeader(file->getDataType());
      // write content at cout.
      file->writeToStream(cout);
   }
   cout << "<File uploaded successfully>\n";
   cout << "</body>\n";
   cout << "</html>\n";
   
   return 0;
}

O exemplo acima é para escrever conteúdo em cout stream, mas você pode abrir seu stream de arquivos e salvar o conteúdo do arquivo carregado em um arquivo no local desejado.

Espero que tenham gostado deste tutorial. Se sim, por favor, envie-nos o seu feedback.

Linguagem C

  1. Namespaces na programação C#
  2. Operadores C++
  3. Comentários C++
  4. Passando array para uma função na programação C++
  5. C Tutorial
  6. Visão geral do C++
  7. Constantes/literais C++
  8. Operadores em C++
  9. Números em C++
  10. Referências C++