ЖУРНАЛ ХАКЕР

CGI - Common Gateway Interface

Спецвыпуск хакер, номер #002, стр. 002-068-2


http://vasya.pupkin.org/cgi-bin/guestbook.cgi?mycoolparameter=thiscoolvalue&pagetoshow=1

Есть еще некоторые ограничения, с которыми нужно бороться - нельзя указывать никакие символы, кроме аглицких букв, цифр да знака подчеркивания. Плюсы, минусы, русские буквы и т.д. представляются в виде %xx, где xx - это шестнадцатиричное значение, соответствующее символу в стандартной таблице оных. Плюсы заменяются на пробелы. Таким образом, вместо "Я тут!" получится "%FF+%F2%F3%F2!". Некоторые браузеры автоматически преобразовывают введенные строки с пробелами в такой формат. Но в любом скрипте это нужно будет преобразовывать самостоятельно. :-( Ну да это не проблема, не парься. Ничего страшного.

Чтобы скрипту было не скучно, пока он работает, сервачок устанавливает "переменные окружения". С их помощью можно, например, попробовать узнать, откуда пришел факин юзверь (его IP - если он, конечно, не пользуется анонимными прокси), метод, которым был послан запрос (их всего два - см. ниже), собственно передаваемые данные и их длину (в случае, когда используется метод передачи "POST").

Методов, которыми можно запросить данные через шлюз, всего два. Их называют "GET" и "POST". Первый метод более компактный, так как все необходимые данные и параметры посылаются прямо в строке с адресом шлюза. Естественно, что уже для гостевой книги и форума такая форма не годится - слишком большое сообщение, запхнутое в строку браузера, убьет и браузер, и желание юзера заходить на этот сайт еще когда-нибудь, так что это не прикольный метод, и к любви не располагает. Второй метод ("POST") позволяет передавать большие объемы данных, ведь для этого не используется буфер браузера. Передача осуществляется через файловые дескрипторы стандартных устройств. Звучит как заупокойная, но на самом деле все просто как мертвая лошадь. Чтобы получить данные, нужно узнать их размер (из одной из переменных окружения) и просто считать с консоли (INPUT в бейсике, blockread в Pascal, fread в C) нужное их количество. Это прикольно, удобно и, несмотря на сложность изложения, легко осваивается - как два байта перекачать.

Доктор, я буду жить? - А зачем?

К чему все эти описания стандартов и способов передачи параметров без, собственно, практики?! Но для начала скажу немного о хлебе насущном. Большинство фришных хостов, где юзерам без разбора выдают халявные странички и позволяют работать со своими собственными CGI-скриптами, поддерживают только скрипты, написанные на Perl`е, реже - на Python`е. Да и писать на этих языках, специально предназначенных для работы с текстом, гораздо удобнее, чем на Pascal или C. Кроме того, не существует Perl и Python компиляторов, поэтому все скрипты будут храниться в своем исходном виде, что иногда бывает удобно (не нужно разделять исходники и бинарники). :-) Из этих двух лэнгвичей пока что, видимо, стоит выбрать Perl. Почему? Просто большинство хостов обеспечивает доступ к Perl`у по умолчанию и только некоторые (правда, их число растет) дополнительно позволяют использовать скрипты, написанные на Python`е.

Назад на стр. 002-068-1  Содержание  Вперед на стр. 002-068-3