CGI-скрипт

  • doc
  • 11.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 106. CGI-скрипт.doc

Лабораторная работа №5.
CGI-скрипт.
(4 часа)

 

Цель работы:

Получить практические навыки в написании и отладке CGI-скрипта на языке программирования, имеющем средства для работы с интерфейсом CGI.

 

Задание:

Во всех вариантах заданий необходимо разработать CGI-скрипт, реализующий некоторый тест, и два счетчика выполнения теста — общий счетчик, значение которого хранится на серверной стороне, и счетчик конкретного посетителя, значение которого хранится на клиентской стороне в виде cookie.

Тест должен содержать не менее трех вопросов с не менее чем тремя вариантами ответа на каждый вопрос.

Данные, введенные пользователем, пересылаются на серверную сторону, обрабатываются CGI-скриптом, который «на лету» формирует документ с результатами прохождения теста и новыми значениями счетчиков прохождения теста.

CGI-скрипт следует написать так, чтобы он мог принимать данные, присланные как методом GET, так и методом POST.

Вариант 1:

Проверка знаний правил дорожного движения.

Вариант 2:

Проверка знания таблицы умножения.

Вариант 3:

Психологический тест.

Вариант 4:

Проверка знания языка разметки гипертекста HTML.

Вариант 5:

Проверка знания каскадных таблиц стилей CSS.

Вариант 6:

Проверка словарного запаса иностранного языка.

Вариант 7:

Проверка знания языка программирования JavaScript.

Вариант 8:

Проверка знания директив web-сервера Apache.

Вариант 9:

Проверка знания языка программирования C++.

Вариант 10:

Проверка знания языка программирования PHP.

 

Порядок выполнения лабораторной работы:

1.       Для выполнения лабораторной работы установить и настроить web-сервер или воспользоваться программным комплексом Denwer (http://denwer.ru).

2.       Создать html-документ с формой.

3.       Написать CGI-скрипт в соответствии с заданным вариантом.

4.       Протестировать созданный CGI-скрипт (при тестировании использовать методы передачи данных GET и POST).

 

Содержание отчета (отчет в электронном виде):

-       отчет сохранить в файле с именем АВТ-000 Иванов (лр5).doc;

-       титульный лист (образец можно скачать по адресу http://ermak.cs.nstu.ru/webprog/wp_labwork_title_page.doc);

-       цель работы;

-       задание;

-       порядок выполнения лабораторной работы

-       разметка html-документа;

-       исходный код скрипта;

-       скриншоты html-документа с исходной формой и документом, сформированным CGI-скриптом;

-       выводы по работе.

Теоретические сведения

 

CGI (Common Gateway Interface) – общий шлюзовой интерфейс

Один из способов формирования динамических html-документов (документов, создаваемых программно на серверной стороне «на лету») заключается в использовании CGI-скриптов.

CGI — это интерфейс, используемый для связи внешней программы, работающей на серверной стороне, с web-сервером.

Интерфейс CGI разработан таким образом, что для написания серверного CGI-скрипта можно использовать любой язык программирования, имеющий средства для работы со стандартными устройствами ввода/вывода.

CGI-скрипт, как правило, помещается в каталог cgi (или cgi-bin) web-сервера, но это требование необязательно, так как CGI-скрипт может располагаться в любом каталоге, но при этом большинство web-серверов требуют дополнительной настройки.

CGI-скрипт, использующий CGI-интерфейс, получает информацию от клиента, обрабатывает ее, и возвращает результат (динамически сформированный html-документ, гиперссылку на существующий html-документ, графическое изображение и т.д.) Так как CGI-скрипт — это программа, она должна быть оттранслирована для той операционной системы, под управлением которой работает web-сервер.

На стороне клиента отображается форма, размеченная тегом <form>, содержащая некоторые поля для ввода данных и кнопку для отсылки данных. После заполнения полей и нажатия кнопки данные в запросе клиента пересылаются на сторону сервера, где web-сервер передает присланные данные CGI-скрипту, используя CGI.

После обработки полученных данных CGI-скрипт создает документ и передает его web-серверу, который в ответе сервера возвращает документ на сторону клиента.

Передача информации от клиента к серверу и передача сформированного документа от сервера к клиенту изображена на рисунке.

1 — клиент формирует запрос, включая в него данные, внесенные в поля формы, запрос отсылается web-серверу.

2 — web-сервер, используя CGI, передает присланные в запросе данные CGI-скрипту.

3 — CGI-скрипт на основе данных формирует документ, возвращает его web-серверу, который, в свою очередь, формирует ответ сервера, включая в него документ, созданный CGI-скриптом, и возвращает ответ клиенту.

 

Для создания формы используется тег <form>.

<form action=URL method=GET | POST>

</form>

 

Атрибут action определяет url GCI-скрипта, обрабатывающего присланные данные.

Атрибут method определяет метод передачи данных. По умолчанию используется метод get.

Метод GET

Метод GET предполагает передачу данных GCI-скрипту через переменные среды (environment variables), устанавливаемые на стороне сервера.

Для передачи данных, присланных методом GET, используется переменная QUERY_STRING. Значением переменной QUERY_STRING будет строка, содержащая данные в формате name1=value1&name2=value2& … &nameN=valueN, где name — это имя поля формы, value — значение, определенное пользователем для поля формы.

Метод POST

При использовании метода POST GCI-скрипт получает присланные данные через стандартный поток ввода.

Объем переданных данных (в байтах) можно получить через переменную окружения CONTENT_LENGTH.

Формирование возвращаемого документа

Вне зависимости от метода передачи данных, GET или POST, результат своей работы GCI-скрипт должен направить в стандартный поток вывода.

При формировании возвращаемого документа GCI-скрипт должен предварить документ хотя бы одним заголовком ответа сервера, определяющим media-тип возвращаемого документа, заголовком Content-type. Заголовок должен быть отделен от собственно возвращаемого документа пустой строкой, как того требует структура ответа сервера.

Чаще всего GCI-скрипт используется для создания html-документов на основе данных, полученных от клиента. В этом случае заголовок ответа сервера должен определять media-тип возвращаемого документа как текст в формате html (Content-type: text/html), за которым необходимо вывести пустую строку, отделяющую заголовок от html-документа.

Web-сервер возвращает результат, сформированный GCI-скриптом, клиенту, возможно дополняя его статусной строкой и другими заголовками ответа сервера.

GCI-скрипт может сформировать полный ответ (со всеми заголовками ответа сервера). В этом случае web-сервер ничего не изменяет в результате работы GCI-скрипта, только пересылает его клиенту «как есть».

 

Пример: на стороне клиента в поля формы вносятся имя и возраст, в зависимости от возраста возвращаются разные приветствия (рассматриваются два варианта: для методов GET и POST).

Метод GET

HTML-документ, содержащий форму:

<html>

<form action=http://localhost/cgi/hello.exe method=get>

<p>ИМЯ<input type=text name=name>

<p>ВОЗРАСТ<input type=text name=age>

<p><input type=submit>

</form>

 

CGI-приложение (файл hello.cpp)

void main()

{

int age;

char *name=new char[256];

char *query_string=new char[256];

query_string=getenv("QUERY_STRING");

 

//query_string=”name=Maria&age=18”

//из строки извлекаются подстроки “Maria” и “18”

//и присваиваются переменным name и age соответственно

 

cout<<”Content-type: text/html\n\n”;

cout<<”<html>”;

if(age<=16) cout<<”Привет, ”;

if(age>16) cout<<”Здравствуйте, ”;

cout<<name<<”</html>”;

}

 

Метод POST

HTML-документ, содержащий форму:

<html>

<form action=http://localhost/cgi/hello.exe method=post>

<p>ИМЯ<input type=text name=name>

<p>ВОЗРАСТ<input type=text name=age>

<p><input type=submit>

</form>

 

CGI-приложение (файл hello.cpp)

void main()

{

int age;

char *name=new char[256];

int length=atoi(getenv("CONTENT_LENGTH"));

char * string=new char[length+1];

cinstring;

 

//string=”name=Maria&age=18”

//из строки извлекаются подстроки “Maria” и “18”

//и присваиваются переменным name и age соответственно

 

cout<<”Content-type: text/html\n\n”;

cout<<”<html>”;

if(age<=16) cout<<”Привет, ”;

if(age>16) cout<<”Здравствуйте, ”;

cout<<name<<”</html>”;

}

 

Работа с cookie

Cookie устанавливаются на клиентской стороне web-сервером с помощью заголовка ответа сервера Set-Cookie.

Set-Cookie: name=value

В случае, если на клиентской стороне cookie уже установлены, информация о cookie пересылается на серверную сторону в запросе браузера-клиента в заголовке Cookie. Присланные cookie на серверной стороне присваиваются переменной окружения HTTP_COOKIE.

 


Скачано с www.znanio.ru