PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic WEB разработка *NIX CouchDB Hack Python
Главная Статьи Perl Что такое CGI?
Главная
 Главная  Контакты
 
Программинг
Статьи Книги ЧаВО
 
xBOOKi
Fresh Books Операционки Сети
 
Поиск
-------
 
Counters
Яндекс цитирования
Rambler's Top100
-------
 
CryptDisk.4h
Программа которая позволяет создать виртуальный шифрованный логический диск.

cryptdisk.4hack.com

-------
 
 

Vladimir Smoliy
Vladimir.Smoliy@p33.f2555.n5020.z2.fidonet.org

Что такое CGI?

 

Что такое CGI? Это общий интерфейс шлюзов, связывающий программу, работющую под управлением вебсервера и клиента в виде HTTP-браузера. Иными словами, это средство, которое позволяет генерить HTML-документы "на лету", в зависимости от условий и пожеланий программиста.

Как и любое клиент-серверное средство, CGI-программа состоит из двух частей - одной, которая работает на клиенте, в среде браузера, и другой, работающей на сервере, в среде вебсервера. Клиентская часть пишется на HTML (возможно, с употреблением раздичных дополнительных средств, расширяющих его возможности), серверная часть может быть на- писана на любом языке программирования, способном создавать выполняе- мые программы на платформе, на которой установлен вебсервер. Мы будем использовать для этих целей Перл, потому что он удобен для обработки текстовых строк - а HTML документ представляет собой именно текст.

Принцип работы интерфейса очень прост - вебсервер, если ему это разрешено, может запустить выполняемую программу; в отличие от запуска этой же программы пользователем потоки вода, вывода и ошибок запущен- ной программы будут перенаправлены: ввода и вывода в протокол HTTP, а ошибок - в файл лога ошибок вебсервера. Таким образом, мы можем созда- вать HTML-документ "на лету", просто выводя в поток вывода его теги с помощию команды print или ее аналога.

Впрочем, лучше один раз увидеть, чем сто раз услышать. Для того, чтобы работать с клиент-серверными пограммами, нужно сначала устано- вить клиент и сервер. В качестве клиента может быть использован любой браузер, поддерживающий протокол HTTP (рекомендуется Netscape, потому что он достаточно строго реагирует на ошибки; можно быть увереным, что то, что работает в нем будет работать где угодно - а обратное выполня- ется редко), в качестве сервера рекомендуется вебсервер Apache. Это один из самых распространенных вебсерверов, он может быть скомпилиро- ван полд все мыслимые платформы и ситемы, и отладженные под него прог- раммы скорее всего сможет установить любой провайдер.

Вебсервер Apache для Windows лучше всего получить по адресу ftp://cdl.bmstu.ru/soft/cgi . Установите его, однако не в директорию, которую он предлагает для установки, а в c:\apache . Вебсервер может работать и в том случае, если он установлен в руть по-умолчанию, одна- ко при его настройке возникнут некоторые разночтения с предлагаемым здесь вариантом - если Вы хотите избегнуть нежелательных осложнений, измените путь по-умолчанию.

Запустите вебсервер (на экране появится пустое черное окно - это нормальный результат успешного запуска; ни в коем случае не закрывайте это окно принудительно - для финиширования вебсервер создал Вам специ- альную иконку). Обратитесь к нему из браузера через URL http://localhost и убедитесь, что демонстрационная веб-страница, кото- рая находится в директори htdocs успешно запускается.

Если вебсервер не удалось запустить, прочитайте выводимое им со- общение об ошибке. Чаще всего вебсервер не может запуститься из-за то- го, что не указано имя. Откройте на редактирование основной файл кон- фигурации вебсервера (httpd.conf) и снимите ремарку с пересенной Servername, присвоив серверу любое имя - например localhost.

Теперь имеет смысл попробовать выполнить первую CGI-программу.

Для того, чтобы иметь возможность писать CGI-программы на Перле, следует установить Перл. Взять его можно там же, где и вебсервер, ус- тановка этой программы не содержит особых подводных камней. Вам будет предложено скомпиллировать Перл из текста на Си, если Вы откажетесь от этого (что рекомендуется), будет развернута уже скомпилированная би- нарная версия. После установки не забудьте проложить в файле Autoexec.bat путь в директорию c:\perl\bin - туда, где содержится файл perl.exe.

Проверьте правильность установки Перла, написав простейшую прог- рамму, состоящую из одной строки:

print "Hello";

Запустите эту программу из любой директории, набрав "perl filename", где filename - имя файла, в который Вы вписали приведенную выше строчку. Если на экране появилось слово Hello, это ззначит что Вы все сделали правильно.

В отличие от многих других вебсерверов, Апач сам вызывет интерп- ретатор Перла, таким образом в каждой программе нужно указывать, где он находиться. Таким образом, первой строчкой нашего CGI-скрипта дол- жен быть путь к интерпретатору:

#!perl

после того, как путь к интерпретатору указан, нужно выставить серверный http-заголовок, указывающий тип отдаваемых данных:

print "Content-type: text/html\n\n";

Обратите внимание, что поле http-заголовков завершается двойным переводом строки. Сами заголовки, если их несколько, отделяются друг от друга одинарным переводом строки.

Третья строчка нашей программы будет содержать необходимую для создания html-документов обвеску:

print "";
print "";
print "\n";

Обратите внимание, что при использовании внутри команды print, двойные кавычки необходимо отчеркивать - иначе интерпретатор примет кавычки за окончание команды, а то, чт о идет после них - за незавер- шенную строку, и ответит ошибкой выполнения.

Теперь необходимо вести строчку вывода, и закрыть html-докумнт.

     print "Hello";
     print "";

Таким образом, вся наша первая программа будет выглядеть так:

#!perl
print "Content-type: text/html\n\n";
print "";
print "";
print "\n";
print "Hello";
print "";

Проверьте правильность ее выполнения, запустив программу локаль- но. Для этого наберите в командной строке: perl filename, где filename - это имя Вашей программы. Если все в порядке, программа должна напи- сать на экране http-заголовок, а затем теги html-документа, который программа создает.

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

Для запуска программы нужно набрать в окне location ее URL:

http://localhost/cgi-bin/filename

Как передавать данные между клиентом и сервером?

Как передать данные с сервера на клиент мы уже рассмотрели. Сле- дующим шагом представляется передача данных с клиента на сервер и фор- мирование клиента с учетом переданной на сервер информации.

Существуют несколько МЕТОДОВ, с помощью которых можно передать информацию на сервер; самые распространенные из них - это метод GET, передающий данные в URL и метод POST, передающий данные в теле запро- са. Hедостатком первого является ограниченный объем передоваемой ин- формации (до 127 байт), недостатком виторого - сложность в формирова- нии запроса.

В самом деле, чтобы сформировать запрос методом GET вполне доста- точно написать знак вопроса после URL вызова, и перечислять через ам- персанд пары "имя=значение":

http://localhost/cgi-bin/test2.cgi?v1=vasya&v2=petya и так далее.

Теперь нужно получить эти данные на сервере, для чего достаточно полу- чить содержимое переменной окружения вебсервера QWERY-STRING. Эта пе- ременная содержит то, что в URL располагалось после знака вопроса.

Есть, однако, одна особенность, которая делает затруднительной использование этой переменнй. Дело в том, что русские буквы, как и специальные символы, в URL заперщены - поэтому их придется заменить на специальный код, который не содержит запретных символов, а просле при- ема на сервере потребуется произвести обратную перекодировку. Такая перекодировка является вполне стандартной для CGI-программирования, и в комплекте любого Перла предусмотрен модуль, который умеет читать со- ответствующую переменую, перекодировать ее содержимое и раскладывать приняные данные по переменным. Модуль, в котором содержася эти подп- рограммы называется CGI. Подключите его к своей программе, написав:

use CGI qw(param);

после чего Вы сможете захватывать из входного потока любую переменную, написав, к примеру:

$v1=param("v1");

теперь, если Вы вызвали скрипт с помощью приведенной выше URL-и, то модуль будет искать в принятых данных переменную потока "v1", а найдя, присвоит ее значение скаляру $v1, который будет теперь равняться "vasya". Чтобы подтвердить правильность наших построений, давайте вы- полним программу, которая иллюстрирует такую передачу данных:

#!perl
use CGI qw(param);
$v1=param("v1");
$v2=param("v2");
print "Content-type: text/html\n\n";
print "";
print "";
print "";
print "Hello, $v1 , $v2 !!!";
print "";

Метод POST передает данные в теле запроса, а получать их следует через входной поток программы (напомню, при запуске программы вебсер- вером он направлен в протокол HTTP). Для отсылки данных этим методом в HTML служат формы. Hапример, выполнив на клиенте приведенную ниже фор- му мы получим точно такой же результат, как и в предыдущем примере:

Модуль CGI, обрабатывающий входные данные работает совершенно одинаково как при применении метода GET, так и при использовании мето- да POST.



Свежее
Резервное копирование rsync-ом
DNS Amplification (DNS усиление)
Алгоритм Шинглов — поиск нечетких дубликатов текста
Metasploit Framework. Обзор
Использование CouchDB
-------



 
Copyright © 2003-2009   Frikazoid.
Rambler's Top100