Latest web development tutorials

C ++ Веб-программирование

Что такое CGI?

  • Common Gateway Interface (CGI), является стандартом, который определяет, каким образом происходит обмен информацией между веб-сервером и сценариев на стороне клиента.
  • Спецификация CGI в настоящее время поддерживается CGI СНП, NCSA определяется следующим образом:
  • Common Gateway Interface (CGI), является шлюзом для внешних программ с информационными серверами (например, HTTP-сервер) Стандартный док-интерфейс.
  • Текущая версия CGI / 1.1, CGI / 1.2 версия продвигается вперед.

веб-браузер

Чтобы лучше понять концепцию CGI, давайте нажмите на гиперссылку, просматривать определенную страницу или URL, и посмотреть, что происходит.

  • Ваш браузер ссылки на веб-сервере HTTP и запрашивает URL, то есть имя файла.
  • Веб-сервер разрешает URL, и найти имя файла. Если вы нашли требуемый файл, веб-сервер будет посылать файл обратно в браузер, в противном случае отправить сообщение об ошибке, указывающее, что вы спрашиваете неправильный файл.
  • Веб-браузер, чтобы получить ответ от веб-сервера, а также на основании полученного ответа, чтобы отобразить файл или сообщение об ошибке.

Тем не менее, таким образом, чтобы создать сервер HTTP, независимо от того, когда запросить каталог файлов, сервер HTTP, не отправляет обратно файл, но в форме выполнения программы и реализации вывода сгенерированного отправляется обратно в окне браузера вне.

Common Gateway Interface (CGI), чтобы сделать приложение (так называемые программы CGI или CGI-скрипты) для работы с Web-серверы и клиенты взаимодействуют стандартные протоколы. Эти программы CGI можно использовать Python, Perl, Shell, C или C ++, и т.д., чтобы подготовиться.

CGI Chart

На приведенном ниже рисунке показана архитектура CGI:

CGI архитектура

Настройка веб-сервера

Перед тем, как сделать программирование CGI, убедитесь, что ваш веб-сервер поддерживает CGI, и был настроен для обработки программ CGI. Все программы CGI выполняются сервером HTTP, должен быть предварительно настроен каталог. Этот каталог называется каталог CGI, по соглашению с именем / Var / WWW / CGI-BIN. Хотя CGI исполняемый файл C ++, но по соглашению, это расширение.cgi.

По умолчанию веб-сервер Apache будет настроен для запуска в / Var / WWW / CGI-BIN в программе CGI. Если вы хотите указать другой каталог для запуска CGI скриптов, вы можете изменить следующий раздел в файле 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>

Здесь мы предполагаем, у вас уже есть веб-сервер и может работать успешно, вы можете запускать любые CGI программы, такие как Perl или Shell и тому подобное.

Первая программа CGI

Рассмотрим следующую программу 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;
}

Обобщение предыдущего кода, исполняемый файл с именем cplusplus.cgi, и этот файл сохраняется в / Var / WWW / CGI-BIN каталога. Перед запуском программы CGI, пожалуйста , используйтеCHMOD 755 cplusplus.cgi команду UNIX, чтобы изменить режим файла, убедитесь , что файл является исполняемым. Доступ исполняемый файл, вы увидите следующий вывод:

Привет мир! Это моя первая программа CGI

Программа выше C ++ это простая программа, она написана на выходной файл STDOUT отображается на экране. Здесь следует отметить , что первая строка выводаContent-Type: Текст / html \ г \ п \ г \ п.Эта строка отправляется обратно в браузер, и предназначенный для отображения в типе содержимого окна браузера. Вы должны понимать основные концепции CGI, с тем, чтобы в дальнейшем использовать Python, чтобы написать более сложную программу CGI. C ++ программа CGI может использоваться с любыми другими внешними системами (например, RDBMS), чтобы взаимодействовать.

Информация заголовка HTTP

СтрокаContent-Type: Текст / html \ г \ п \ г \ п является составной частью информации заголовка HTTP, он отправляется в браузер для того, чтобы лучше понять содержание страницы.В виде информации заголовка HTTP, выглядит следующим образом:

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

Есть другая важная информация заголовка HTTP, они будут часто использоваться в программировании 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。

Переменные окружения CGI

Все программы CGI могут получить доступ следующие переменные окружения. Эти переменные при написании программ CGI играют очень важную роль.

变量名 描述
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 服务器上运行的软件的名称和版本。

Ниже приведен список всех программах CGI 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;
}

библиотека C ++ CGI

В реальном примере, вам необходимо выполнить множество операций с помощью программ CGI. Существует программа , разработанная специально для C ++ библиотеки письменного CGI, мы можем ftp://ftp.gnu.org/gnu/cgicc/~~V скачать этот CGI - библиотеку, библиотеку и установлены в соответствии со следующими шагами:

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

Вы можете нажать на C ++ в CGI Lib Документации , просматривать библиотеки документов.

GET и POST методы

Вы, возможно, сталкивался с такой ситуацией, когда вам нужно передать какую-то информацию из браузера на веб-сервер, и, наконец, передается программе CGI. Как правило браузеры два способа использования этой информации на веб-сервере GET и POST методы.

Используйте метод GET для передачи информации

GET метод для передачи пользовательской информации, закодированный добавлен к запросу страницы. Страницы и закодированная информация разделены по характеру, следующим образом ?:

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

Метод GET метод используется по умолчанию из браузера передачи информации веб-сервер, это длинная строка строка генерируется в адресной строке браузера. Если пароль или другую конфиденциальную информацию, которую вы передаете на сервер, не использовать метод GET. GET метод ограничен в размерах, в строке запроса передачи данных до 1024 символов.

При использовании метода GET является использование заголовка HTTP QUERY_STRING, чтобы передавать информацию, использовать переменную окружения QUERY_STRING в программах CGI для доступа.

Вы можете идти в ногу с ключом в URL простого подключения, вы можете также использовать HTML-метод GET <FORM> тег для передачи информации.

Простые примеры URL: Получ

Вот простой URL, используя метод GET для передачи двух значений hello_get.py программы.

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

Следующие примеры генерируютcpp_get.cgi программу CGIдля обработки входного потока данную веб - браузером. С помощью библиотеки C ++ CGI, вы можете легко получить доступ к передачи информации:

#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;
}

Теперь, компилировать эту программу следующим образом:

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

Сформировать cpp_get.cgi, и поместить его в каталог CGI и попытаться получить доступ к следующей ссылке:

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

Это дает следующие результаты:

名:ZARA 
姓:ALI 

Примеры простой формы: Получ

Вот простой пример, используя HTML-формы и кнопки отправки проходит два значения. Мы будем использовать тот же cpp_get.cgi CGI скрипт для обработки входных данных.

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

Вот фактический выход формы, введите имя и фамилию, а затем нажмите на кнопку отправки, чтобы просмотреть результаты.

С помощью метода POST для передачи информации

Более надежный способ передачи информации в программе CGI является метод POST. Этот способ упаковки информации с помощью метода GET точно так же, за исключением того, что это не сообщение в виде текстовой строки в URL? После того, как будет пройден, но поместить его в отдельном сообщении в виде поставки. Сообщение передается на стандартный ввод в виде CGI-скриптов.

Мы также используем cpp_get.cgi для обработки методом POST. Давайте возьмем тот же самый пример, чтобы пройти через использование HTML-форм и отправить кнопку два значения, но на этот раз мы не используем метод GET, но метод POST, следующим образом:

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

CGI программа для передачи данных в поле

Когда вам нужно выбрать несколько вариантов, мы используем галочки.

В следующем примере HTML-код формы с двумя флажками:

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

Следующая программа C ++ будет генерировать cpp_checkbox.cgi скрипт для обработки веб-браузер, введя в поле заданной.

#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;
}

Передача данных в программе CGI Радиокнопка

Когда нужно только выбрать вариант, мы используем радио-кнопки.

В следующем примере HTML-код представляет собой форму с двумя кнопками радио:

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

Следующая программа C ++ будет генерировать cpp_radiobutton.cgi скрипт для обработки веб-браузер ввода с помощью кнопки радиоприема.

#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;
}

Передача данных в текстовой области программы CGI

CGI программа, когда вам нужно передать несколько строк текста, мы используем элемент TEXTAREA.

В следующем примере HTML-код формы с 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>

Следующая программа C ++ будет генерировать cpp_textarea.cgi скрипт для обработки ввода заданного веб-браузером, текстовой области.

#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;
}

Выпадающее окно для передачи данных программы CGI

При наличии нескольких вариантов, но может выбрать только один или два варианта, мы используем выпадающий список.

В следующем примере HTML-код формы с раскрывающегося списка:

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

Следующая программа C ++ будет генерировать cpp_dropdown.cgi скрипт для обработки веб-браузер входа с помощью выпадающего списка заданного.

#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;
}

Использование Cookies в CGI,

Протокол HTTP является протоколом без. Но для бизнес-сайт, он должен сохранять информацию о сеансе связи между различными страницами. Например, пользователь после завершения нескольких этапов завершения регистрации страницы. Тем не менее, как сохранить пользователя данные сеанса на каждой странице.

Во многих случаях, использование куки, чтобы помнить и отслеживать информацию о предпочтениях пользователей, покупка, комиссионные и другие наиболее эффективный метод для преследования лучшего опыта посетителя или сайта статистики необходимую информацию.

Как это работает?

Сервер в виде печенья, чтобы отправить некоторые данные в браузере посетителя. Если браузер принимает куки, куки будут храниться в виде обычного текста, записанного на жестком диске посетителя. Теперь, когда посетителей на другую страницу на сайте, получает печенье. После того, как вы нашли печенье, сервер будет знать, что хранится.

Печенье это чистые записи текстовых данных, пять полей переменной длины с:

  • Истекает: срок годности печенья.Если это поле оставлено пустым, печенье истекает, когда посетитель выходит из браузера.
  • Домен: доменное имя сайта.
  • Путь: Установите путь к каталогу печенья или страницы.Если вы хотите получить печенье из любого каталога или страницы, это поле можно оставить пустым.
  • Безопасность: Если это поле содержит слово "безопасный", то печенье может быть восстановлена через безопасный сервер.Если оставить это поле пустым, то никаких ограничений не существует.
  • Имя = Значение: печенье в виде пар ключ-значение , чтобы установить и получить.

Настройка Cookies

Отправить куки в браузер очень просто. Эти файлы будут перед полем Content-типа, и HTTP заголовки, которые будут отправлены вместе. Предположим, что вы хотите установить идентификатор пользователя и пароль для печенья, печенье, установленные шаги заключаются в следующем:

#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;
}

Из этого примера мы научились устанавливать куки. Мы используем заголовокHTTP Set-Cookie , чтобы установить печенье.

Вот некоторые свойства для установки куки не является обязательным, такие как Expires, домен и путь. Стоит отметить, печенье отправляются в строке"Content-Type: Текст / html \ г \ п \ г \ пперед тем , как установить.

Компиляция выше программу, которая генерирует setcookies.cgi, и попытаться использовать следующую ссылку, чтобы установить куки. Она создаст четыре куки на вашем компьютере:

/cgi-bin/setcookies.cgi

Получить Cookies

куки, чтобы получить все настройки очень просты. куки хранятся в CGI переменные окружения HTTP_COOKIE, а их форма сохраняется следующим образом:

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

В следующем примере показано, как получить печенье.

#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;
}

Теперь, компилировать выше программа генерирует getcookies.cgi, и попытаться использовать следующую ссылку, чтобы получить все доступные куки на вашем компьютере:

/cgi-bin/getcookies.cgi

Это создаст список, который показывает все остальные четыре печенья печенья на множестве и вашем компьютере:

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

Примеры загрузки файлов

Чтобы загрузить файл, HTML форма должна ENCTYPE набор атрибутов длямультисекционного / form-данные.тег ввода с типом файла создаст кнопку "Обзор".

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

Результаты этого кода является следующий вид:

Документы:

Примечание: Приведенный выше пример был намеренно отключен в сохраненные на наших серверах , чтобы загрузить файлы.Вы можете попробовать приведенный выше код на вашем сервере.

Ниже используются для обработкиcpp_uploadfile.cpp сценария загрузки файлов:

#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;
}

Приведенный выше пример записи вCOUT поток, но вы можете открыть файловый поток, и содержимое загруженного файла в файл на целевом местоположении.