Как создать cgi приложение
Алексей Еремеев
дата публикации 16-10-2000 00:00
Простые CGI приложения на Дельфи.
Итак, как же работают cgi приложения?
Что нам понадобится (и для последующих примеров тоже)
- Создаем новое приложение.
- Убираем из проекта единственную форму (сохранять не надо).
- Идем в меню View -> Project source. Убираем все между begin и end.
- В uses убираем Forms и пишем Windows.
- Перед begin пишем (будет консольное).
Скомпилируйте и положите в Вашу cgi-bin директорию на сервере, а потом попробуйте её вызвать из броузера. Если что-то не вышло, то придется поковырятся с настройками броузера, сервера и прав доступа. И перепроверить программу на предмет очепяток :-). Если это не заработает, то нельзя двигаться дальше, так что придется заставить это работать.
Заработало? Вуаля! Идем дальше. (Между прочим размер программы пока всего 8,5 килобайт)
Какие все-таки переменные окружения получает наша программа? Хорошо-бы иметь список того, с чем мы можем оперировать при обработке запроса. Если покопаться в хэлпах, то можно обнаружить пару функций LPVOID GetEnvironmentStrings(VOID) и BOOL FreeEnvironmentStrings(LPTSTR lpszEnvironmentBlock) ; Это то, что нам нужно. Создадим процедурку для заполнения объекта TStrings парами переменная=параметр.
Теперь в программу в раздел uses нужно добавить Classes и SysUtils. Она, правда, вспухнет более чем в пять раз, но куда деваться. Функции нам нужны. Не писать-же их всех заново? Ладно, в конце концов это будет исполнятся на сервере и по сети исходники не пойдут. Что еще надо? Добавить пару переменных. Вот текст программы:
Часы, которые показывают время на сервере.
Это уже динамическая страница, она меняет свой контент в зависимости от внешних условий (времени на сервере :-). Тут не должно быть никаких сложностей. Вот код программы. (GetEnvStrings тут не нужна)
Модуль Classes тут не нужен. Размер программы 32 килобайта. Часы статичные в том смысле, что время на них само не "бежит" (идет, течет) и нужна перезагрузка страницы для обновления.
Модификация: автоматическое обновление часов. Используем специальную команду для броузера клиента. Для этого вставим следующую строку сразу после строки с Правда перегружать страницу каждую секунду это очень расточительно. Сисадмины могут и убить за трафик :-) при такой страничке он небольшой, но все-же.
примерно 160 байт * 60 сек * 60 мин * 24 часа * 30 дней = 395 мегабайта в месяц.
Так что с REFRESH поосторожней :-)
- Если есть параметр Type=simple, то часы выводяться без секунд
- Если есть параметр Color=число, то текст цвета определяется числом
Продолжение (возможно) следует.
Ожидаемые темы: вывод картинок, генерация картинок на лету, доступ к базе данных, методы внутренней авторизации, куки (печенья) и всякое другое относительно Web-а. Присылайте свои темы для разбора или свои предложения и/или содержание. Несмотря на засилье Perl, ASP, PHP, ActiveX, Java, Java-script это тоже неплохой инструмент.
Еремеев Алексей
Специально для Королевства "Delphi"
- Пример №1 (6.3 K) обновление от 11/3/2005 7:54:00 AM
- Пример №2 (28 K) обновление от 11/3/2005 7:55:00 AM
- Пример №3 (40.6 K) обновление от 11/3/2005 7:55:00 AM
- Пример №4 (30.6 K) обновление от 11/3/2005 7:55:00 AM
- Пример №5 (30.2 K) обновление от 11/3/2005 7:55:00 AM
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.
Среда проектирования Delphi также позволяет создавать CGI и ISAPI приложения.
Создание CGI-приложения
Если WEB-броузер посылает в качестве запроса URL-адрес CGI-приложения, то web-сервер запускает это приложение и передает ему параметры запроса через стандартный ввод. Сформированная в результате выполнения CGI-приложения HTML-страница возвращается WEB-серверу через стандартный вывод.
Для того, чтобы создать CGI-приложение, запускаемое на сервере, следует создать проект Web Server Application и в диалоге New Web Server Application (рис. 28.3) выбрать тип серверного приложения (например, CGI Stand-alone executable).
В результате будет создан проект, содержащий главный файл приложения и модуль Unit1 :
Для того чтобы создать код, формирующий HTML-страницу, следует создать объект типа TWebActionItem (например, WebActionItem1 ), а далее создать для данного объекта обработчик события действия OnAction.
При этом автоматически будет сформирован следующий код:
Код HTML-страницы записывается в свойство Content объекта Response .
После размещения созданного CGI-приложения в каталог WEB-сервера, предназначенный для исполняемых файлов, web -браузер может формировать запрос, указывая URL-адрес данного CGI-приложения.
Разбор параметров
Для доступа к значению формы из GET-запроса используется метод QueryFields объекта типа TWebRequest .
Для доступа к значению формы из POST-запроса используется метод ContentFields объекта типа TWebRequest .
Для доступа к параметрам самого запроса используется метод GetFieldByName :
Применение Cookies
Для задания Cookies следует в обработчике события действия ввести следующий код:
Для запроса Cookies следует в обработчике события действия ввести следующий код:
Вопросы и ответы
Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?
Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере о бъявления указателя на метод использовали в формальном описании оба названия:
тип_метода (имя_класса::*имя_метода_указателя)
(список параметров);
тип_функции (*имя_ функции_указателя)
(список параметров);
при этом можно было тип_функции во втором описании заменить на тип_метода? Т.е.:
тип_метода (*имя_ метода_указателя)
(список параметров);
Нам нужно только знать, какая программа CGI на сервере должна быть выполнена браузером, и нет необходимости вникать в детали, потому что эти процессы не требуют работы программистов. Связь между сервером и программой CGI - вот что нам важно. В нормальных условиях данные передаются между сервером и программой CGI через стандартный ввод и вывод, и этот процесс требует взаимодействия переменных среды.
Прежде всего, мы должны сначала понять, что такое CGI и для чего он нужен?
- Cgi - это программа, интерфейс шлюза, который позволяет веб-страницам общаться с клиентами.
- CGI - это интерфейс между сервером и клиентом. Две части, составляющие программу CGI, одна часть - это HTML-страница, которую она видит. Другая часть - это программа, запущенная на сервере. Когда клиент отправляет запрос CGI на веб-сервер, веб-сервер определяет метод передачи данных программе CGI в соответствии с типом программы CGI.Вообще говоря, данные передаются между программами CGI через стандартные потоки ввода / вывода и переменные среды.
Структурная схема CGI
Давайте посмотрим на структуру CGI
Программа CGI
- Задача программы CGI обычно состоит в том, чтобы получать данные формы, выполнять обработку данных и, наконец, генерировать новую страницу на основе результата обработки и возвращать ее в браузер. Данные формы обычно отправляются на сервер методом POST и получаются программой CGI.Программа должна сопоставить данные интерфейса с внутренними данными, чтобы иметь возможность перейти к следующему шагу.. Программа CGI получает данные со страницы и различает их на основе имени элемента в имени / значении элемента. Но страница возврата CGI более хлопотная. Поскольку интерфейс может измениться после разработки программы, и в некоторых областях могут отсутствовать элементы формы, которые должны обрабатываться программой, для программы имя элемента формы не может использоваться в качестве основы для различения. Общий метод заключается в использовании комментариев в HTML < ! –XXX–> отметить.
- Программисту необходимо создать метку комментария в шаблоне для каждого элемента формы и любого другого места, которое должно обрабатываться программой, в соответствии с определенными правилами, например, следующая строка комментария - это строка элемента формы. Программа CGI может оценивать информацию об элементе формы и обрабатывать ее на основе пометки аннотации. Программа считывает файл шаблона построчно и проверяет наличие отметок комментариев. Если они есть, необходимо обработать следующую строку.Назначьте данные элементам формы и, наконец, верните страницу с данными в браузер.
- В шаблоне HTML также нужно обратить внимание на проверку ввода. Согласно принципу, что чем раньше будет проверка ввода, тем лучше данные, отправленные пользователем, должны быть проверены в пользовательском интерфейсе. В настоящее время обычно используются сценарии javascript.Когда пользователь отправляет данные, вызывается метод onSubmit объекта формы, и в этом методе можно проверить ввод пользователя.Обычно используемые проверки включают в себя необходимость, максимальную / минимальную длину, символы, числа, адрес электронной почты, правильный IP-адрес, соответствие регулярному выражению и т. Д.
Разработка программы CGI
Понять cgi, вы можете понятьСпецификация программирования CGIПриходите узнать больше.
краткое введение
CGI работает
- Браузер запрашивает URL-адрес предыдущего приложения CGI через HTML-форму или гиперссылку.
- Сервер получает запрос.
- Сервер выполняет указанное приложение CGI.
- Приложения CGI выполняют необходимые операции, обычно на основе содержимого, введенного программой просмотра.
- Приложение CGI форматирует результат в документ (обычно HTML-страницу), понятный веб-серверу и браузеру.
- Веб-сервер возвращает результат браузеру.
Примечание о приложениях CGI: приложения CGI запускаются в серверной системе, которая может быть запрошена браузером, и для их выполнения требуется процессорное время и память сервера. Если одновременно работают тысячи таких программ, это предъявит чрезвычайно высокие требования к серверной системе. Вы должны внимательно рассмотреть эту проблему, чтобы предотвратить сбой серверной системы.
Переменные среды CGI
Список переменных среды
имя переменной | эффект |
---|---|
SERVER-NAME | Запустите последовательность CGI как имя машины или IP-адрес. |
SERVER-INTERFACE | Тип WWW-сервера, например CERN или NCSA. |
SERVER-PROTOCOL | Протокол связи должен быть HTTP / 1.0. |
SERVER-PORT | Порт TCP, обычно веб-порт - 80. |
HTTP-ACCEPT | HTTP определяет тип данных, которые может принимать браузер. |
HTTP-REFERER | URL-адрес файла, в который была отправлена форма. (Не все браузеры передают эту переменную) |
HTTP-USER-AGENT | Информация о браузере, отправившем форму. |
GETWAY-INTERFACE | Версия программы CGI - CGI / 1.1 под UNIX. |
PATH-TRANSLATED | Фактическое имя пути, содержащееся в PATH-INFO. |
PATH-INFO | Дополнительный путь, когда браузер отправляет данные в режиме GET. |
SCRIPT-NAME | Путь к программе CGI. |
QUERY-STRING | Данные, введенные в форму, представляют собой содержимое после среднего номера URL-адреса. (Передать данные клиента на сервер [POST]) |
REMOTE-HOST | Имя хоста программы-отправителя, это значение не может быть определено. |
REMOTE-ADDR | IP-адрес машины, отправляющей программу. |
REMOTE-USER | Имя человека, отправившего программу. |
CONTENT_TYPE | Если форма отправляется с помощью POST, это значение будет application / x-www-form-urlencoded. В форме загрузки типом содержимого будет multipart / form-data. |
CONTENT_LENGTH | Для форм, отправленных POST, количество байтов стандартного порта ввода. |
REQUEST_METHOD | POST или GET, в зависимости от того, как ваша форма отправлена. |
Роль переменных среды
GET/POST
Метод GET передает данные в программу CGI только через переменные среды (например, QUERY-STRING), в то время как метод POST передает данные в программу CGI через переменные среды и стандартный ввод, поэтому метод POST может более удобно передавать больше данных в программу CGI.
метод | Описание | проблема |
---|---|---|
GET метод | Передайте параметры через форму, встроенную в URL. Для программ CGI параметры, передаваемые в методе GET, должны приниматься через переменную среды «QUERY-STRING». | 1. Содержимое параметра используется как информация об URL-адресе, которую может видеть пользователь 2. Существует ограничение на размер. |
Метод POST | Программы CGI получают параметры из стандартного ввода. В отличие от метода GET, содержимое параметра не может быть получено из информации URL, и нет ограничений на размер. | Это полностью противоположно проблеме 1., 2 метода GET. |
Пример кода 1
Пример программы GET:
Пример почтовой программы:
Процесс запроса:
(1) кнопка отправки—> (2) вызов post.cgi—> (3) сохранение данных в data \ data.txt.
- Правила декодирования:
- +: Преобразовать + в пробел;
- % xx: специальный символ, представленный его шестнадцатеричным значением кода ASCII (% используется как escape-символ). По значению xx он преобразуется в соответствующий символ ASCII. Это преобразование должно выполняться для имени переменной формы и значения переменной.
Описание кода
Метод POST отправляет данные во входной поток STDIN программы CGI. Каждая переменная в форме (FORM) будет отправлена на веб-сервер в форме name = value, а несколько данных разделены символом &, например: name = value & name2 = value2. Имя (имя, имя2) - это имя тега, такое как INPUT, SELECT или TEXTAREA, определенное в форме, а значение - это значение тега, введенное или выбранное пользователем.
CGI название
Когда выводится программа CGI, сначала должен выводиться заголовок CGI. Существует три типа заголовков:
Анализ входных данных программы CGI
Обладая вышеуказанными знаниями, мы можем написать несколько программ CGI, Во-первых, вам необходимо проанализировать входные данные.Метод таков: всякий раз, когда встречается символ =, он отмечает конец имени переменной формы; всякий раз, когда встречается символ &, он отмечает конец значения переменной формы. Обратите внимание, что значение последней переменной входных данных не заканчивается на &. Таким образом, мы можем разложить входные данные на группы значений.
Но тогда вы обнаружите, что ввод CGI нерегулярен. Например, иногда появляется строка входных символов, подобная следующему формату: filename = hello & cmd = world + I% 27. Это потому, что браузер Некоторые загруженные специальные символы закодированы, поэтому их необходимо декодировать после разделения данных.
Пример кода 2
Более подробную информацию можно найти на веб-сайте: Примечания по разработке CGIC / CGI и BOA под Linux
1 веб-страница: программе CGI интерфейса входа в систему необходимо только захватить данные пароля, отправленные сервером, а затем проверить переход. HTML-код выглядит следующим образом:
На приведенном выше рисунке о конкретном символе судят по получению строки связи, после чего выполняется переход. В случае успешного входа в систему выполняется переход на страницу config.cgi, в противном случае отображается ошибка.
2 Программа CGI выглядит следующим образом
Дружественный пример рекомендации: Подробный CGI (принцип, настройка и доступ)
Поместим команду интерпретатора shell в сценарий, при этом вывод команды будет отображен в документе HTML.
echo "<H3><CENTER> Total amount of users on to-day: $USERS</CENTER></H3>"
echo "<CENTER> It must be early or it ls dinner time</CENTER>"
echo "<CENTER> because there ain't many users logged on</CENTER>"
Тег <PRE> применяется для сохранения опций форматирования, состоящих из служебных символов и символов табуляции. Обычно тег <PRE> используется для отображения вывода системных команд, таких как df, либо списка файлов, либо нескольких конструкций echo.
Естественно использование сценариев cgi, открывающих Web–страницы с целью отображения определенного количества сведений, не всегда является оптимальным, гораздо эффективней внедрить сценарий cgi в документ HTML таким образом, чтобы вывод сценария отображался на обычной странице.
Для внедрения сценариев cgi в документы можно воспользоваться технологией SSI (Server Side Includes — включения на стороне сервера). При отображении документа происходит замена команды SSI результатом выполнения данной команды или сценария. При этом также экспортируются дополнительные переменные среды, содержащие сведения об установленном сервере и командах.
Для активизации возможностей SSI, обеспечивающих просмотр сервером команд SSI внутри документов, следует раскоментировать соответствующие:
Addhandler server-passed.shtml
Addtype text/html shtml
В Debian Apache2(etc/apache2/apache2.conf) всего этого нет, поэтому;
Для перезапуска сервера введите команду service apace2 reload (kill -1), в результате чего сервер повторно считает конфигурационные файлы. Документы, для которых применяется SSI, используют расширение файла shtml вместо расширения html.
Счетчик количества посещений
Создадим документ, в котором отображается счетчик количества посещений.
- команда - exec,
- аргумент - cgi,
- "значение" - имя вызываемого сценария.
Вывод на печать текущих настроек Web–среды с помощью ссылки
При выполнении сценария cgi какое-то количество переменных среды становится незадействован-ным. Для просмотра значений большинства переменных используется команда env или set. На основе файла main.shtml который по средствам ссылки на Web-странице, отразит значения этих переменных мы и продемонстрируем вывод на печать текущих настроек Web–среды с помощью ссылки.
Для начала создадим сценарий "cgi", по средствам которого и будет выведены значения параметров среды, назовем его printenv.cgi, поскольку для просмотра переменных понадобится env или set, выберем env, добавив для наглядности системный календарь.
Знание Perl расширит и упростит использование CGI приложений и вот ниже пример вывода текущих настроек Web-среды, с помощью Perl:
Читайте также: