Когда сервер выполняет скрипт, для него создаются некоторые переменные окружения, среди которых как локальные данные (адрес скрипта на сервере, версия П/О сервера), так и данные полученные с 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 |