Привет, перец! Сегодня мы будем
учиться писать CGI на Delphi, ведь тебе надоели
скучные статические страницы на твоем
сайте, и ты решил написать свой собственный
скрипт, но не знаешь, как, - тогда эта статья
для тебя. Для этого нам понадобится Delphi,
желательно, 5-ой версии.

Создание заготовки Web-модуля

Для этого запустим мастера
командой File->New->Web Server Application. Далее
мастер нам предложив выбор:

  • ISAPI/NSAPI Dynamic Link Library. Создание
    библиотеки .DLL, которая автоматом
    загружается сервером по необходимости.
    Данные для обработки передаются в
    библиотеку, а возвращаются сервером в
    виде специальной  формы с помощью
    интерфейса ISAPI фирмы Microsoft или NSAPI фирмы
    Netscape.

  • CGI Stand-alone executable. Создание
    серверного консольного приложения. По
    мере надобности загружается сервером.
    Приложение получает параметры и передает
    результаты работы напрямую.

  • Win-CGI Stand-alone executable. Создание
    приложения в формате Windows. Единственное
    отличие, что оно получает инфу через INI
    файл.

Параметры и результаты. Модули
получают от сервера запрос (параметры),
указанные пользователем вручную или
сгенерированные броузером автоматически.

Допустим, что у нас есть модуль
Test.exe, а расположен он на www.my-site.ru в каталоге,
для которого установлены права на запуск CGI(например,
cgi-bin). Данный модуль будет вызван обращением:

http://www.my-site.ru/cgi-bin/Test.exe/PARAM1?f7

Здесь:

http://www.my-site.ru - адрес веб-узла;
cgi-bin- каталог;
Test.exe-модуль;
/PARAM1-название параметра;
?-символ, отделяющий параметр от значения;
f7- значение параметра.

Модуль можно запускать и без
параметров, а также со значением,
указываемым модулю без названия параметра.

Пример создания Web-модуля.

Суть примера будет в том, что при
запросе с параметром /DAY со значение name, отображается название текущего дня недели,
если значение full, отображается полная дата.
Если параметр /TIME, то показывается текущее
время, а если нет параметра, то отображается
короткое приветствие.

Веб-модуль создается с помощью
мастера. Выберем консольный тип приложения
CGI Stand-alone executable. Откроется окно WebModule1. Пока
список действий пуст. Чтобы его добавить
надо выбрать строку Actions, кликнуть правой
кнопкой мыши и в появившейся менюшке
выбрать пункт Add Item. Добавится новая строка.
В Object Inspector появятся свойства объекта:

Default- имеет значение true, если
данное действие выполняется по умолчанию,
когда в ответ на запрос не выполнено ни одно
из других действий.
Enabled- имеет значение true, если сервер имеет
право использовать данное действие.
MethodType-тип обрабатываемого запроса.
PathInfo- имя параметра.
Producer- имя поставщика Web, формирующего
результат работы

Основное свойство - это PathInfo, в
котором надо писать /TIME, /DAY или ничего. Итак,
надо подготовить три объекта в списке Actions.
У первого (DefaultAction) в свойство PathInfo пустое, у
второго(DayAction)- строка /DAY, а у третьего (TimeAction)-строка
/TIME.

Чтобы объект DefaultAction реагировал
на запрос, на вкладке Events надо выбрать
свойство OnAction и щелкнуть на нем два раза.

procedure TWebModule1.WebModule1DefaultActionAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Begin
Respose.Content:=’<body bgcolor=white><center>’+’<h3>Привет!</h3></center></body>’;
End;

Обработка запросов с параметрами
чуть сложнее. Чтобы сформировать название
дня недели, надо узнать его номер с помощью
функции DayOfWeek, которая принимает значения
от 1(суббота) до 7(пятница). Текущий день
можно получить командой Now. DateToStr-возвращается
текущая дата. Процедура при параметре /DAY
выглядит вот каким образом:

procedure TWebModule1.WebModule1DayActionAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Const DAY_NAMES: array[1..7] of string =(‘воскресенье’,
‘понедельник’,’вторник’,’среда’,’четверг’,’пятница’,’суббота’);
Begin
If Request.Query=’name’
then Respose.Content : = ‘<center>сегодня ‘+ DAY_NAMES[DayOfWeek(Now)]+’</center>’
else if Request.Query=’full’
then Respose.Content : = ‘<center> ‘+DateToStr(Now)+ ’</center>’;
end;

А вот обработчик запроса с
параметром /TIME. В нем используется функция
TimeToStr.

procedure TWebModule1.WebModule1TimeActionAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Begin
Respose.Content : = ‘<center> сейчас ‘+TimeToStr(Now)+ ’</center>’;
End;

Запуск и отладка.

Для отладки и запуска CGI скриптов
нам нужен www сервер, поддерживающий CGI
скрипты. Например Personal Web Server от Microsoft или
Apache Web Server. Если у Вас на компьютере не
установлен ни один из подходящих серверов,
а Вам не хочется захламлять свой компьютер
огромными программами, то можно
воспользоваться крохотным www-сервером TinyWeb.
Эта программа вполне удовлетворяет
требованиям, которые предъявляются к www
серверу, необходимому для отладки CGI
приложений. Найти ее можно на сайте
производителя: http://www.ritlabs.com/tinyweb
.

Установка сервера предельно проста: нужно
разархивировать все файлы из архива в какую-либо
директорию и запустить модуль Tiny.exe, указав
в качестве параметра командной строки
полный путь к корневому каталогу сервера.
Нужно помнить, что в этом каталоге должен
располагаться файл с именем index.html. Надо также создать подкаталог с именем CGI-BIN в
который мы будем помещать скомпилированные
CGI скрипты.

Теги:

Check Also

Исходный кот. Как заставить нейронную сеть ошибиться

Нейросети теперь повсюду, и распознавание объектов на картинках — это одно из самых популя…

Оставить мнение