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:
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:
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.