Я не уверен, что какой-либо из этих ответов касался вопроса.Кодирование CGI с использованием C ++ будет означать чтение переменных среды, которые устанавливаются веб-сервером, независимо от того, используете ли вы стороннюю библиотеку или какой веб-сервер запущен, включая tomcat.Следующий пример - простой и быстрый способ получить наиболее интересный ввод - строку запроса.Если вы только начинаете, я думаю, что лучше начать с основ, поэтому, если вы решите использовать какую-то внешнюю библиотеку, это будет казаться менее мистическим.Это должно дать вам достаточно, чтобы нажать Google и понять, что происходит.
#include <stdlib.h>
#include <iostream>
using namespace std;
int
main(int argc, char** argv)
{
string method = getenv("REQUEST_METHOD");
string query;
if (method == "GET")
query = getenv("QUERY_STRING");
else if (method == "POST")
cin >> query;
else
query = "Not sure what to do with method " + method;
cout << "Content-Type: text/html" << endl << endl
<< "<html>" << endl
<< query << endl
<< "</html>" << endl;
}
Примечание. Content-Type в выводе.Это заголовок HTTP.Вы можете добавить любое количество заголовков перед двойным концом.На мгновение попробуйте изменить Content-Type на text / plain.
Скомпилируйте пример кода в shiney_cpp_cgi, скопируйте его в каталог cgi (для tomcat это обычно tomcat_root / webapps / ROOT / WEB-INF / cgi), а затем нажмите его в своем браузере, чтобы использовать метод GET:
myserver.mydomain:myport/cgi-bin/shiney_cpp_cgi?foo=bar
Чтобы отправить запрос по почте, используйте CURL следующим образом:
curl --data 'foo=bar' myserver.mydomain:myport/cgi-bin/shiney_cpp_cgi
Для обслуживания C ++ изtomcat, вы можете отредактировать tomcat_root / conf / web.xml и изменить исполняемый файл на пустую строку.По умолчанию tomcat попытается запустить ваш C ++ как скрипт perl, который perl (надеюсь!) Не сможет проанализировать.
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
...
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
...
</servlet>