Создание и продвижение сайтов
Автоматизация вашего бизнеса
+7 (495) 767-05-42
Заказать звонок
CGI на C++

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



Библиотека для использования CGI (Common Gateway Interface) при написании программ на C++. Примерно понять как пользовать можно из примера. Для результирующего документа можно установить кодовые страницы KOI-8R, CP866, WIN-1251, легко добавить другие. FreeWare, с исходниками.
Класть готовый бинарник надо в каталог в котором могут выполняться CGI-скрипты, разумеется. И иметь он должен соотвествующих владельца/группу и аттрибуты. Об этом - в инструкции к Вашему веб-серверу.

main.cpp:
#include "cgi.h"

using namespace cgi;
int main(int argc,char* argv[])
{

try
{
cgi_app cgi(KOI8R);
cgi.start_session();
cgi.title(cgi.get("titlevar")); // в секцию < title >
cgi <<"Still testing" << "<hr>"; // в секцию < body >
cgi <<cgi.session_id(); // туда же
//cgi.print(); // необязательно, потому как print() при необходимости вызывается из деструктора
...
}
catch (const char* err_text)
{
cout << "Content-type: text/plain; charset=KOI8-R" << endl << endl;
cout << "The server is unable to complete your request (an exception was thrown)!" << endl;
cout << "The reason was:" << endl;
cout << err_text << endl;
return 1;
}
return 0;
}

Собираеца примерно так (тут уже прикручены iconv и MySQL++):

#g++ -w -I/usr/local/include -I/usr/local/include/mysql -I. -DDEBUG -DMAIN -c main.cpp cgi.cpp urlcode.cpp document.cpp stat.cpp basic.cpp
#g++ -L/usr/local/lib -L/usr/local/lib/mysql -Wl,--rpath -Wl,/usr/local/lib -o main.cgi main.o cgi.o urlcode.o document.o stat.o basic.o /usr/local/lib/libmysqlpp.so /usr/local/lib/libiconv.so

Кусочек cgi.h с комментариями
...
methods method(); // - метод (M_GET, M_POST)
char* smethod(); // "GET" или "POST"

bool ssl(); // истина если соединение SSL/TLS

char* get(const char*); // параметр переданный методом GET
char* post(const char*); // параметр переданный методом POST

char* cookie(const char*); // параметр переданный через cookie
char* server(const char*); // аналогично из окружения apache (сервера)

void setcookie(cookie_type&); // установить cookie (см. typedef cookie_type)

char* start_session(void); // начать сессию, продолжительность в const.h - session_duration
char* session_id(void); // узнать id сессии, начатой start_session()

Кусочек document.h с комментариями
...
void clear();// очистить документ
void print(); // показать готовый документ, если документ не распечатан, то этот метод будет автоматически вызван из destructorа

void redirect(const char*); // перейти на url (отдаётся в headers) !! не путать head и headers
void redirect(std::string&);

void header(const char*); // отдать header ...
void header(std::string);

void title(const char*); // установить заголовок страницы
void title(std::string);

void background(const char*); // установить фоновую картинку (отдаётся в тэге body)
void background(std:string);

void head(const char*); // вставить в секцию head
void head(std::string);

void body(int); // вставить в секцию body
void body(const char*);
void body(std::string);
void body(const char*,halignment);
void body_file(const char*);
void body_file(std::string&);

void br(); // вставить тэг br
void hr(); // вставить тэг hr

void formstart(char*, char*); // начать form, параметры action, method
void forminput(char*, char*, char*);// intput как часть form, параметры type, name, value
void formstop(); // закончить форму
//дальше можно мутить аналогично...
Оператор << для класса cgi::document (от него наследуется cgi::cgi_app) определён как:

template <class what_class>
cgi::document& operator<<(cgi::document& to,what_class what)
{
to._body<<what;
return to;
};

где _body (как и _head и _header) это std:ostringstream.

Загрузки

Скачать можно здесь (FreeWare) (версия 0.30alpha от 13.04.2007):

/downloads/cgi.tar.gz



профнастил