Здравствуйте, Green_B, Вы писали:
GB>Народ — можно ли на С++ писать такие вещи, как, например, на перле? Если можно — то как? Заранее спасибо!!!
Можно обойтись без всяких библиотек, все что надо сделать — принять строку запроса, обработать ее соответствующим образом и сгенерить HTML файл, учитывая указать в начале http заголовок, по меньшей мере:
"Content-Type: text/html\n\n"
Строку запроса можно получить двумя способами:
1. В случае, если используется метот GET, ищи строку типа "a=5&d=7" и т.д. и т.п в массиве argv, передающемся приложению.
2. В случае, если используется метот POST, то же самое (чаще больше) читается со стандартного потока ввода. Не уверен, что cin тут поможет, но как-то это делается всетаки. Тут нужно учесть, что в заголовке могут двоичные файлы содержаться, если upload производится.
Ну и все, что сгенерил смело выпускай в стандартный поток вывода. cout по умолчанию например.
Здравствуйте, Green_B, Вы писали:
GB>Народ — можно ли на С++ писать такие вещи, как, например, на перле? Если можно — то как? Заранее спасибо!!!
Легко.
Только сервер иногда соответствующим образом настроить надо, чтоб бинарники запускать разрешал.
Почитай стандарт CGI — в общем случае все общение веб-сервера с cgi-скриптом сводится к тому, что сервер
скрипту передает заголовки запроса в переменных окружения вида "HTTP_*" (при этом немного изменяются оригинальные названия заголовков — все заглавными буквами и пробелы, минусы и прочие "неправильные" символы заменены символами подчеркивания)
Плюс саму строку запроса после "?" для запроса типа GET — в переменной окружения QUERY_STRING
Если запрос был PUT, POST и подобный, то POST-данные передаются в CGI на вход STDIN.
Обратно сервер получает ответ с STDOUT скрипта.
Ответ должен содержать минимальный заголовок ответа, хотябы "Content-type: text/html" или подобный.
Дальше через строку — тело ответа.
В заголовке ответа есть несколько фич, типа управления статусом сервера ("Status: 200") или редирект одной строкой("Location: httр://blablabla.com").
В любом случае ты даешь ему минимальный заголовок, сервер перед отправкой ответа браузеру сам добавит недостающие заголовки.
Сервер ОБЯЗАН парсит заголовки CGI-приложения и дополнять/исправлять их.
Собственно основное вроде все упомянул.
Короче задачи твоей проги — правильно смочь принять нужные параметры запроса из переменных окружения и stdin потока, и правильно отправить ответ на stdout.
Если хочешь из скрипта сгенерить ошибку, можешь ответ об ошибке вместо stdout отправить на stderr(при этом заголовки ответа необязательны).
В stdout только при этом постарайся не отправить ни байта.
Сервер обязан это дело просечь и вывести в браузер юзеру сообщение об ошибке в надлежащем виде с текстом из твоего stderr.
Ну, в общем, о всяких мелочах тут долго можно говорить. Читай мануалы. RTFM тебе поможет
Здравствуйте, Green_B, Вы писали:
GB>Народ — можно ли на С++ писать такие вещи, как, например, на перле? Если можно — то как? Заранее спасибо!!!
Есть некоторая разница между С++ и Перлом:
— на общедоступных веб-серверах обычно не позволяют размещать компилированные интернет-приложения. Значит, для CGI на С++ надо иметь свой сервер.
— хоть можно обойтись без дополнительных библиотек для CGI на С++, но нет смысла.
— а зачем пользоваться С++ вместо Перла? Если для повышения быстродействия, то вместо CGI есть смысл выбрать другой метод: интерфейсы ISAPI (для IIS), ASAPI (для Apache) и др. Проблема конечно, что программа получится зависящей от сервера.
— Если на сервере будет Windows, и не нужна совместимость с UNIX, то вместо CGI следует использовать ASP или ASP.NET. Для ASP на С++ пишутся COM-объекты.Обычно их вызов вставляется внутрь скрипта, написанного на VBScript, но это необязательно. В ASP.NET своя методика, не зависящая от языка, и С++ в этом случае стоит применять, если он привычен или для использования существующих COM объектов.