Первый CGI-сценарий

HTML-файл, который мы видели в предыдущем разделе, — это всего лишь HTML-файл, а не сценарий CGI. Когда броузер обращается к нему, удаленный веб-сервер просто отправляет обратно текст файла, с помощью которого в броузере создается новая страница. Чтобы проиллюстрировать природу CGI-сценариев, перепишем этот пример в виде CGI- программы на языке Python, как показано в примере 15.3.

Пример 15.3. PP4E\Internet\Web\cgi-bin\tutor0.py

#!/usr/bin/python """

выполняется на сервере, выводит разметку HTML для создания новой страницы;

url=http://localhost/cgibin/tutor0.py

print(‘Content-type: text/html\n’)

print(‘<TITLE>CGI 101</TITLE>’)

print(‘<H1>A First CGI Script</H1>’)

print(‘<P>Hello, CGI World!</P>’)

Файл tutor0.py создает такую же страницу, как показано на рис. 15.2, если обратиться к нему из броузера, — просто замените расширение файла в адресе URL с .html на .py и добавьте в путь имя подкаталога

cgi-bin, чтобы в результате в адресной строке броузера получился адрес http://localhost/cgi-bin/tutor0.py.

Но это совсем другой зверь — это выполняемая программа, запускаемая на сервере в ответ на попытку обратиться к ней. Это также совершенно законная программа на языке Python, в которой разметка HTML страницы выводится динамически, а не заготовлена заранее в статичном файле. На самом деле в этой программе вообще мало чего специфического для CGI — при запуске из командной строки она просто выведет разметку HTML:

C:\\PP4E\Internet\Web\cgi-bin> python tutor0.py

Content-type: text/html

<TITLE>CGI 101</TITLE>

<H1>A First CGI Script</H1>

<P>Hello, CGI World!</P>

Однако при выполнении этой программы HTTP-сервером на компьютере веб-сервера стандартный поток вывода подключается к сокету, из которого осуществляет чтение броузер на компьютере клиента. Поэтому весь вывод пересылается через Интернет веб-броузеру. Вследствие этого выводимый сценарием текст должен иметь формат, соответствующий ожиданиям броузера.

В частности, когда вывод сценария достигает броузера, первая полученная им строка интерпретируется как заголовок, описывающий последующий текст. В выводимом ответе может быть несколько строк заголовков, но между заголовками и началом разметки HTML (или другими данными) всегда должна быть одна пустая строка. Как будет показано ниже, директивы «cookies», управляющие механизмом сохранения информации, также передаются в области заголовков — перед пустой строкой.

В данном сценарии первая строка заголовка сообщает броузеру, что дальнейшая передача представляет собой текст в формате HTML (text/ html), а символ новой строки (\n) в конце первого вызова функции print генерирует дополнительный перевод строки помимо того, который создает сама функция print. В результате сразу после заголовка добавляется пустая строка. Оставшаяся часть вывода программы представляет собой стандартную разметку HTML, которая используется броузером для создания веб-страницы, в точности так, как если бы разметка HTML находилась в статическом HTML-файле на сервере.

Обращение к сценариям CGI производится в точности как к файлам HTML: вам необходимо ввести в адресную строку броузера полный адрес URL этого сценария либо выполнить щелчок на ссылке tutor0.py в корневой странице примеров, изображенной на рис. 15.1 (осуществляющий переход по минимальной гиперссылке, преобразуемой в полный адрес URL сценария). На рис. 15.3 показана страница, которая будет сгенерирована сценарием, если обратиться к нему из броузера.

Рис. 15.3. Простая веб-страница, созданная сценарием CGI

 

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий