Библиотека 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)
Кусочек document.h с комментариями
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()
...
void clear();// очистить документ
Оператор << для класса cgi::document (от него наследуется cgi::cgi_app) определён как:
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(); // закончить форму
//дальше можно мутить аналогично...
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
профнастил