Cgi скрипт на C++. Сейчас научимся создавать cgi скрипты на С++. Для этого нам понадобится Web сервер, желательно Apache ну и конечно VC++. Для начала создадим домен, в котором будем тестировать скрипт, лезь в директорию где установлен Apache, у меня это C:\WebServers, дальше в папке home создай папку с названием test.com. В test.com сделай еще две папки, www и cgi, не забудь создать текстовый файл error.log. В папку www помести файл index.html, примерно такого содержания:
<html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"/> <title>script</title> </head> <body bgcolor="black" text="#FF9933" link="blue" vlink="purple" alink="red"> <form action="http://www.test.com/cgi/CGIScriptElf.cgi" method=GET>Enter: <input type=text maxlength=256 name=comment/> <input type=submit value=Go/> </form> </body> </html>
После запускай VC++, создавай новый проект Win32 Console Application и пиши следующее:
#include <windows.h> #include <iostream> using namespace std; int main() { char szName[1024]; cout<<"Content-Type: text/html\n\n"; cout<<"<html><head><title>Lazy_elf</title></head>\n"; cout<<"<body bgcolor='black' text='#F2F2F2' link='#FF9900' vlink='#FF9900' alink='#FF9900'>\n"; cout<<"<meta http-equiv='content-type' content='text/html; charset=windows-1251'/>\n"; cout<<"<p style='line-height:100%; margin-left:10%;' align='center'><span style='font-size:14pt;'>Cgi-скрипт на С++.</span></p>\n"; cout<<"<p style='line-height:100%; margin-left:10%;'><a href=http://www.pagel.by.ru>www.pagel.by.ru</a> Code by Lazy_elf</p>\n"; char comment[256]; if(GetEnvironmentVariable("QUERY_STRING",comment,256)) {cout<<"<p style='line-height:100%; margin-left:10%;'>Вы ввели: "<<comment<<"</p>\n";} //////////////////////////////////////////////////////////////////////////////////////////////////////// cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#FF9933'>Данные о клиенте:</font></p>\n"; if(GetEnvironmentVariable("HTTP_USER_AGENT",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_USER_AGENT: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("HTTP_ACCEPT",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_ACCEPT: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("HTTP_REFERER",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_REFERER: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("HTTP_ACCEPT_ENCODING",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_ACCEPT_ENCODING: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("HTTP_ACCEPT_LANGUAGE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_ACCEPT_LANGUAGE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("HTTP_IF_MODIFIED_SINCE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_IF_MODIFIED_SINCE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("HTTP_FROM",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>HTTP_FROM: </font>"<<szName<<"</p>\n";} //////////////////////////////////////////////////////////////////////////////////////////////////////// szName[0] = '\0'; cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#FF9933'>Данные о сервере:</font></p>\n"; if(GetEnvironmentVariable("GATEWAY_INTERFACE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>GATEWAY_INTERFACE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("SERVER_NAME",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>SERVER_NAME: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("SERVER_PORT",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>SERVER_PORT: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("SERVER_PROTOCOL",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>SERVER_PROTOCOL: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("SERVER_SOFTWARE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>SERVER_SOFTWARE: </font>"<<szName<<"</p>\n";} //////////////////////////////////////////////////////////////////////////////////////////////////////// szName[0] = '\0'; cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#FF9933'>Данные о запросе:</font></p>\n"; if(GetEnvironmentVariable("AUTH_TYPE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>AUTH_TYPE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("CONTENT_FILE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>CONTENT_FILE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("CONTENT_LENGTH",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>CONTENT_LENGTH: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("CONTENT_TYPE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>CONTENT_TYPE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("PATH_INFO",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>PATH_INFO: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("PATH_TRANSLATED",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>PATH_TRANSLATED: </font>"<<szName<<"</p>\n";} //хм... if(GetEnvironmentVariable("REMOTE_ADDR",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>REMOTE_ADDR: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("REMOTE_HOST",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>REMOTE_HOST: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("REQUEST_METHOD",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>REQUEST_METHOD: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("REQUEST_LINE",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>REQUEST_LINE: </font>"<<szName<<"</p>\n";} if(GetEnvironmentVariable("SCRIPT_NAME",szName,1024)) {cout<<"<p style='line-height:100%; margin-left:10%;' align='left'><font color='#00C800'>SCRIPT_NAME: </font>"<<szName<<"</p>\n";} cout<<"</body></html>\n"; return 0; }
Компилируй, у получившейся программы измени расширение на cgi или просто в настройках линкера (Project->Settings->Link) измени Output file name и помести готовый скрипт в папку cgi. Запускай Apache, потом какой-нибудь браузер, в строке адрес напиши http://www.test.com, должно появится следующее:
Введи в поле и нажми кнопку Go, появится новая страница созданная скриптом, на которой сможешь увидеть значения основных переменных. Для получения значения нам необходима API функция GetEnvironmentVariable.
DWORD GetEnvironmentVariable( LPCTSTR lpName, - имя переменной; LPTSTR lpBuffer, - указатель на буфер, куда будет записано значение; DWORD nSize - размер буфера. );