На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

ПАРАМЕТРЫ КОМАНДНОЙ  СТРОКИ CGI

Сценарии CGI получают данные через командную строку и переменные окруже­ния. О переменных окружения мы уже говорили в предыдущих разделах. С по­мощью командной строки можно производить интерактивный поиск. Обычно сценарии CGI используют командную строку, чтобы выполнить запрос ISINDEX, позволяющий добавить интерактивный поиск по ключевому слову к вашему HTML-документу. Однако не все серверные программы поддерживают запрос ISINDEX. Броузер посылает запрос в виде командной строки серверу. Программа-сервер может идентифицировать входные данные командной строки, устанавли­вая, использовал ли броузер метод GET и содержит ли строка URI uuencoded = = символы.
Если броузер использует метод строка поиска URI не содержит uuencoded =
= символы, то запрос осуществляется в форме командной строки. Перед тем как сервер вызовет соответствующий сценарий CGI, программа-сервер должна раз­бить командную строку, используя знак «+» для отделения параметров. Затем сервер выполняет дополнительное декодирование (если необходимо) каждого параметра, переданного в строке поиска UR!, и сохраняет каждый параметр-строку в массиве с именем argv.
Выполняемое сервером дополнительное декодирование заключается в разделе­нии отдельных строк при использовании в качестве разделителя символа ампер-санда После этого сервер снова разбивает каждую из строк, используя знак «=», чтобы отделить имя переменной от ее значения (оно стоит справа от знака «=»). Сервер хранит количество элементов массива argv в целочисленной пере­менной argc.
Если сервер нашел знак «=» внутри переменной окружения QUERY STRlNl то он не будет посылать командную строку в качестве входных данных сценария CGI. Кроме того, если по какой-то причине сервер не может послать массив argv сценарию CGI, он обеспечит недекодированную информацию запроса в переменной окружения QUERY STRING.
ПРЯМОЙ   ВЫВОД БРОУЗЕРУ
Обычно выданный сценарием ответ интерпретируется сервером и только затем пересылается броузеру. Преимуществом пересылки выходных данных от сцена­рия серверу является тот факт, что сценарий не должен посылать при каждом запросе полный HTTP-заголовок. Однако, чтобы разгрузить сервер, некоторые сценарии сами посылают свой выходные данные броузеру. Чтобы можно было отличить их от обычных сценариев, протокол CGI требует начинать имена этих сценариев с букв nph- (Not to Parse the Header - не анализировать заголовок). Если имя сценария CGI начинается с букв то сервер не будет изменять
заголовок. В этом случае ответственность за правильный HTTP-ответ возлага­ется на сам сценарий.
ЗАЮЛОВКИ CGI
Выходные данные сценария CGI начинаются с заголовка. Этот заголовок состо­ит из текстовых строк и записывается в том же формате, что и обычные заголов­ки HTTP. В конце обязательно должна стоять пустая строка (пара символов Если выходные данные сценария CGI содержат заголовки, не являю­щиеся директивами для сервера, то сервер пересылает их непосредственно броу­зеру. В настоящее время спецификация CGI определяет три такие директивы:


Content-type

 

Location

 

Status

 

Поле Content-type определяет тип/подтип MIME-данмых,

отправляемых броузе-

ру. Обычно сценарии CGI выдают на выходе документ

HTML. В этом случае

поле Content-type будет выглядеть так:

 

Content-type: text/html

601


Поле Location указывает на документ. С помощью этого поля сценарии указывают местонахождение документа. В случае, если документ находится не на сервере и содержимым поля Location является некоторый сервер перенаправляет броу­зер на соответствующий Web-сайт. Если же поле Location содержит виртуальный путь (файл расположен на компьютере сервера), то сервер получит указанный документ. Все это будет выглядеть так, как будто запрос этого документа сделал сам броузер. Например, для того чтобы указать на документ на удаленном сер­вере, значение поля Location в заголовке CGI может иметь следующий вид:
Location: http://www.jamsa.com/
Поле Status содержит значение статуса HTTP, которое сервер направляет от сцена­рия броузеру (подробное описание значений статуса HTTP можно найти в гла­ве 6). Вызывающий сценарий сервера использует различные коды статуса HTTP. Однако вам может понадобиться направлять код статуса броузеру напрямую. Особенно часто этот метод используется при возникновении ошибок.
В следующем примере проиллюстрированы типичные выходные данные сцена­рия CGI, которые он должен генерировать при отправке данных серверу. После того как данные достигнут сервера, тот направит данные броузеру:
Content-type:     text/html     <! Далее следует пустая строка >
<HTML> <HEAD>
<TiTLE>This /.v the title</TITLE>
</HEAD> <BODY>
This is the body generated by your CGI script.
</BODY> </HTML>
Обратите внимание на пустую строку между полем Content-type и тегом Она абсолютно необходима. Если вы пропустите эту строку, то сервер не сможет правильно обработать документ. Следующий фрагмент кода на языке С создает записанный выше HTML-документ с помощью функции print/.
II некоторый код  .   . .
printf("Content-type:     text/html\n");
printf("\n");    // He забудьте вставить эту строку
printf("<HTML>\n");
printf("<HEAD>\n");
printf("<TITLE>This is the title</TITLE>\n"); printf("</HEAD>\n"); printf("<BODY>\n");
printf("This is the body generated by your CGI script.\n"); printf("</BODY>\n"); printf("</HTML>\n"); // некоторый код
СОЗДАНИЕ СЦЕНАРИЯ       с помощью C++
Как известно, C++ является достаточно гибким языком программирования, используемым для создания программ, которые можно использовать повторно. Как вы увидите, создание сценариев на C++ является более сложной задачей, чем написание обычных программ. Однако после некоторой практики вы сможете и сами создавать сценарии, которые можно будет использовать многократно.
Итак, мы воспользуемся сценарием CExample2. CPF в котором применим HTTP-метод POST. С помощью этого метода мы будем отправлять серверу инфор­мацию, введенную пользователем в форму. Чтобы выполнить сценарий, вос­пользуйтесь расположенным на компакт-диске файлом С Example 2. HTM. После запуска сценария на вашем экране должна появиться форма, показанная на ри­сунке
Как вы узнаете, поскольку форма посылает данные серверу посредством метода POST, этот сценарий использует для получения входных данных файловый дес­криптор stdin. Исходный текст программы имеется на компакт-диске. Он рас­положен в каталоге главы 20, подкаталоге example2.
Примечание. Для разработки описываемых в этой книге сценариев использовался компилятор Microsoft Visual C++ 5.0. Скелет кода создавался с помощью Арр Wizard. Добавленные к скелету строки выделены с помощью пометок «START CUSTOM CODE: ».
Просматривая заголовочный файл CExample2.h, обратите внимание на объявле­ния документа, окна, области просмотра и указатели на массивы строк. С по­мощью указателей т_pFrame и т_pView программа получает доступ к объекту документа, окну просмотра и рамке. Так как в программе Example2 области просмотра и рамки не используются, то для удаления этих объектов использует­ся специальный прием. Чтобы удалить эти два окна, программа устанавливает нулевой размер этих окон в файле С Example 2.СРР. Программа использует указа­тель m_saParams для получения доступа к параметрам через стандартные дес­крипторы файлового ввода-вывода.
Программа перегружает виртуальные функции Initlnstancen Exitlnstance в файле СЕхатр1е2.СРР. В функции Initlnstance код резервирует память для хранения установок окна программы. Кроме того, функция выполняет анализ командной строки и элементов INl-файла. В функции Exitlnstance занятая память освобож­дается. В заголовочном файле CExample2.fi также объявляются три функции (ParseCmdLine, ParselniFile и Create Response), с помощью которых производятся операции со строками и ввод-вывод.
'Поскольку для отправки данных на сервер в форме CExample2.HTMиспользуется метод POST, программа должна считывать входные данные для сценария с по­мощью дескриптора файла stdin. Прочитав данные, программа посылает серве­ру ответ. Для этого используется дескриптор файла stdout.
Для более подробного анализа программы Example! ознакомьтесь с комментари­ями, расположенными в исходном тексте программы. Сам текст можно найти на поставляемом вместе с книгой компакт-диске.
НАИБОЛЕЕ  ЧАСТО ИСПОЛЬЗУЕМЫЕ       СОЗДАНИЯ сценариев
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
При создании сценариев CGI существует возможность выбора наиболее подходя­щего для вас языка программирования. В общем, для создания сценария можно ,
использовать любой язык программирования, поддерживающий функции стан­дартного ввода-вывода. Кроме рассмотренных здесь языков С и C++, можно использовать Perl (Practical Extraction Report Language), Visual Basic, TCL, FORTRAN, JavaScript, а также любую оболочку Unix.
другие решения
Сценарии широко используются практически на всех Web-сай­тах. Однако они не являются единственным методом органи­зации интерактивной работы с пользователем. Кроме этого в настоящее время используются так называемые помощники стороны сервера (SSA - server-side assists). С их помощью сер­вер может и сам обрабатывать введенные пользователем данные и создавать ответ в виде HTML-документов. Благодаря таким помощникам серверу не нужно больше запускать другие программы. Более того, некоторые серверы используют интерфейсы API. Каждый API содержит функции обработки вход­ных данных и генерации ответного HTML-документа. Независимо от ис­пользуемого метода, процесс остается неизменным: пользователь заполняет некоторую форму и посылает ее серверу, который обрабатывает введенные пользователем значения и выдает результат в виде HTML-документа. .
Каждый из трех методов обладает сильными и слабыми сторонами. Метод SSA на модификации программы сервера. Как     понимаете, сер-
вер является достаточно сложной программой. Поэтому модификация его кода при каждом изменении процедур обработки формы пред­ставляет достаточно сложную задачу. Кроме того, модифицируя исходный
текст севера, можно нарушить безопасность системы. Однако одним из пре­имуществ помощников стороны сервера является большинстве операционных систем наиболее сложной задачей считается выполнение про­грамм. Благодаря SSA, сервер не будет больше вызывать специальные про­граммы для обработки каждой формы.
Достоинством сценариев CGI является простота их использования. Дсйстви-тельно, во многих статьях утверждается, что сценарии CGI столь просты, что их могут создавать даже люди, далекие от программирования. Это утвер­ждение является справедливым лишь для простых сценариев. Однако по мере усложнения работы сценария требования к его разработке намного возраста­ют. Недостаток сценариев CGI заключается в том, что для обработки фор­мы сервер должен вызывать дополнительную программу. программа содержит ошибки (или троянских коней), то безопасность системы окажется под угрозой.
И наконец, давайте поговорим об использовании API. Основное достоин­ство этого метода заключается в том, что вам не придется ни устанавливать сервер программное обеспечение, ни использовать вне-
шнюю программу. По мере развития ваших способностей будете дически обращаться к использованию помощников стороны сервера и ин­терфейсов API.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика