1 Учебный курс Основы Web-технологий Лекция 6 CGI и Perl. SSI и Cookies кандидат технических наук Павел Брониславович Храмцов
2 CGI-скрипты и Perl Вывод данных: #!/usr/bin/perl print Content-type: text/plain\n\nHello Perl!\n Стандартный поток вывода #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print " "; print " Perl и CGI. "; print " ";
3 CGI-скрипты и Perl Переменные окружения #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; print "REQUEST_METHOD:$ENV{REQUEST_METHOD}"; #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; foreach $hkey (keys %ENV) { print "$hkey:$ENV{$hkey}"; }
4 CGI-скрипты и Perl Аргументы командной строки host>script arg1 arg2 arg3 script?arg1+arg2+arg3 #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; foreach $arg { print "$arg\n"; }
5 CGI-скрипты и Perl Стандартный ввод #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; print "CONTENT_LENGTH=$ENV{CONTENT_LENGTH}"; #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; print "CONTENT_LENGTH=$ENV{CONTENT_LENGTH}\n"; read STDIN,$query,$ENV{CONTENT_LENGTH}; print "Query:$query.";
6 Немного о Perl Типы данных и переменные Скаляры: $a = 1; $b = 2.5; $str = "это строка символов"; Одномерные = = = $q = $c[3]; # 4
7 Немного о Perl Типы данных и переменные Ассоциативные массивы: %a = ("test",1,"test2",2); $c = $a{test}; # $c=1 Указатели $a = 1; $p = = (1,2,3); $p = $p = \%c; $d = $$p{"test"}; Дескрипторы потоков данных: open IN,"
8 Немного о Perl Регулярные выражения (сопоставление с образцом) if($query =~ /target/) { print $query; } script?n1=v1&n2=v2&n3=v3... ($v1,$v2,$v3) = ($query =~ /^n1=(.+)&n2=(.+)&n3=(.+)$/); print $v1,$v2,$v3; $query =~ s/%(.{2})/pack('c',hex($1))/eg;
9 Немного о Perl Управление потоком вычислений while() { if(/the end/) {goto out;}; } out: print "the_end\n"; for($i=0;$i
10 Немного о Perl Файлы, каталоги, конвейеры, сокеты read STDIN, $query, $ENV{CONTENT_LENGTH}; #!/usr/local/bin/perl use IPC::Open2; use FileHandle; $pid = open2(\*RDR,\*WRD,"cat"); WRD->autoflush(); print WRD "test\n"; $got = ; print "Это \$got:$got";
11 Немного о Perl Eval(); Библиотеки: $sm =~ s/%(.{2})/pack('c',hex($1))/eg; #!/usr/local/bin/perl read STDIN,$query,$ENV{CONTENT_LENGTH}; $query =~ s/%(.{2})/pack('c',hex($1))/ge; $query =~ tr/+/ /ge; $query =~ s/f=//; eval $query; CPAN(
12 HTML: Form...
13 HTML: Form GET POST
14 HTML: Form SSI
15 HTML: Form INPUT имя_поля.x=DD&имя_поля.y=DD
16 HTML: Form SELECT и OPTION Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье
17 HTML: Form TEXTAREA Здесь можно ввести произвольный текст off отключить выравнивание внутри поля; virtual включить выравнивание, но передавать как длинную строку; physical включить выравнивание, но передавать вместе с переводом строк.
18 CGI: Обработка запросов GET ISINDEX engine+world+wide+web #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; print "Запрос: $ENV{QUERY_STRING}.\n"; $n for($i=0;$i
19 CGI: Обработка запросов GET Поле1: Поле2: GET /test.cgi?f1=value1&f2=value2 HTTP/1.0 $query = $ENV{QUERY_STRING);
20 CGI: Обработка запросов Передача параметров через PATH_INFO адрес ресурсаразделительпараметры //localhost/cgi-bin/test/arg1/arg2/arg3?param1+param2 схемаразделительпуть к ресурсу адрес скрипта PATH_INFO //localhost/cgi-bin/test/arg1/arg2/arg3
21 CGI: Обработка запросов Стандартные библиотеки разбора данных CGI.pm полный набор функций для генерации HTML- файлов с формами и разбора запросов CGI-скриптами. CGI_Lite это средство работы с составными (multipart/form- data) запросами. При работе с функциями данного модуля следует иметь в виду, что временные файлы эти функции размещают в каталоге /tmp.
22 Server Site Includes Базовый синтаксис: Примеры:
23 Server Site Includes Расширенный синтаксис:
24 Cookies GET /index.html HTTP/1.1 Host: HTTP/ OK Content-type: text/html Set-Cookie: name=value GET /spec.html HTTP/1.1 Host: Cookie: name=value Accept: */*
25 Cookies ПРИМЕР (Ответ Google): HTTP/ Found Location: Cache-Control: private Set-Cookie: PREF=ID=3cdad051f1089e67:TM= :LM= : S=M73wpRopi-laDSbf; expires=Sat, 17-Apr :47:58 GMT; path=/; domain=.google.com Date: Thu, 17 Apr :47:58 GMT Content-Type: text/html Server: gws Content-Length: 218 Connection: Close