Встроенные переменные, метод GET

Автор статьи: WebZ.ru team ©
Сайт Автора: webz.ru
E-mail Автора: нет
Дата публикации: 20.12.2005



 Когда сервер выполняет скрипт, для него создаются некоторые переменные окружения, среди которых как локальные данные (адрес скрипта на сервере, версия П/О сервера), так и данные полученные с HTTP запросом (версия браузера, IP удаленной машины и т.д.)
Знать эти данные для CGI программиста просто жизненно важно. Вот эти переменные:

$ENV{'REQUEST_METHOD'} Это одно из самых главных поле используемое для определения метода запроса HTTP. Протокол HTTP использует методы GET и POST для запроса к серверу. Они отличаются тем что при методе GET запрос является как бы частью URL т.е. http://..../cgi-bin/myscript.cgi?param=value а при методе POST данные передаются в теле HTTP-запроса (при GET тело запроса пусто).
Для нас пока интересен только метод GET.
$ENV{'QUERY_STRING'} Это строка запроса при методе GET.
$ENV{'CONTENT_TYPE'} Тип тела запроса.
$ENV{'REMOTE_ADDR'} IP-Адрес удаленного Хоста, делающего данный запрос.
$ENV{'REMOTE_HOST'} Если запрашивающий Хост имеет доменное имя, то эта переменная содержит его, в противном случае -тот же самый IP-адресс что и REMOTE_ADDR.
$ENV{'SCRIPT_NAME'} Содержит URL адрес файла скрипта.
$ENV{'SCRIPT_FILENAME'} Полный путь к скрипту на сервере.
$ENV{'SERVER_NAME'} Имя серера ,чаще всего доменное как www.microsoft.com ,но в редких случаях за неимением такового может быть IP-адресом.
$ENV{'SERVER_PORT'} TCP-Порт сервера использующийся для соединения .По умолчанию HTTP-порт 80, хотя может быть в некоторых случаях другим.
$ENV{'SERVER_SOFTWARE'} Программное обеспечение сервера.
$ENV{'AUTH_TYPE'}
$ENV{'REMOTE_USER'}
Эти переменные определены в том случае, когда запрошенный ресурс требует аутентификации пользователя.
$ENV{'HTTP_ACCEPT'} Давая запрос на сервер браузер обычно рассчитывает получить информацию определенного формата, и для этого он в заголовке запроса указывает поле Accept:, Отсюда скрипту поступает список тех MIME, которые браузер готов принять в качестве ответа от сервера.
$ENV{'HTTP_USER_AGENT'} Браузер обычно посылает на сервер и информацию о себе, чтоб базируясь на знании особенностей и недостатков конкретных браузеров CGI-скрипт мог выдать информацию с учетом этого. Например, разные браузеры могут поддерживать или не поддерживать какие-то HTML тэги.
$ENV{'CONTENT_LENGTH'} Длина в байтах тела запроса.
$ENV{'GATEWAY_INTERFACE'} Версия протокола CGI.
$ENV{'SERVER_PROTOCOL'} Версия HTTP протокола сервера.

Получение данных методом GET
Суть метода GET заключается в передаче некоторого объема информации вместе с URL скрипта. Для отделения URL от передаваемой информации используют знак "?" (вопросительный знак). Неплохо бы чисто формально напомнить, что все пробелы заменяются в URL на знак '+', а все специальные и непечатные символы на последовательность %hh ,где hh-шестнадцатиричный код символа. Методом GET можно одновременно передавать несколько значений. Как это делается я расскажу вам позже, а пока будем довольствоваться одним передаваемым значением.

Напишем программу, которая выводит квадрат числа, если передаем ей число, или строку, если передаем текстовую строку. Передавать данные следует примерно так:

"http://.../cgi-bin/script.pl?256"

#!/usr/bin/perl
print "Content-Type: text/html\n\n";

if ($ENV{'QUERY_STRING'}**2 == 0){print $ENV{'QUERY_STRING'}}
else{print $ENV{'QUERY_STRING'}**2}

И еще одна программка, выводящая некоторые сведения о Вашем сервере:

#!/usr/bin/perl
#programm 9
print "Content-Type: text/html\n\n";

@array=($ENV{'SERVER_SOFTWARE'},$ENV{'SERVER_NAME'});
@array=(@array,$ENV{'SCRIPT_FILENAME'},$ENV{'HTTP_USER_AGENT'});
print "<table>";
foreach (@array){
print "<tr><td>$_</td></tr>\n";
}
print "</table>"

Попробуйте написать программу, выводящую таблицу Пифагора с максимальным значением по оси X и Y, передаваемым методом GET.
Сделайте так, чтобы ячейки закрашивались в шахматном порядке, а оси имели черный цвет.

Напишите программу, которая выводит символьную строку, переданную скрипту только в том случае, если IP удаленной машины не соответствует 127.0.0.1 .