Учебный курс Основы web- технологий Лекция 6 cgi и perl. ssi ...
DESCRIPTION
Учебный курс Основы Web- технологий Лекция 6 CGI и Perl. SSI и Cookies. кандидат технических наук Павел Брониславович Храмцов [email protected]. CGI- скрипты и Perl. Вывод данных: #!/usr/bin/perl print “ Content-type: text/plain\n\nHello Perl!\n ” Стандартный поток вывода - PowerPoint PPT PresentationTRANSCRIPT
1
Учебный курс
Основы Web-технологий Лекция 6
CGI и Perl. SSI и Cookies
кандидат технических наукПавел Брониславович Храмцов
2
CGI-скрипты и Perl
Вывод данных:
#!/usr/bin/perlprint “Content-type: text/plain\n\nHello Perl!\n”
Стандартный поток вывода
#!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML><HEAD></HEAD><BODY>"; print "<H1>Perl и CGI.</H1>"; print "</BODY></HTML>";
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
http://my.intuit.ru/directory/ script?arg1+arg2+arg3
#!/usr/local/bin/perl print "Content-type: text/plain\n\n"; foreach $arg (@ARGV) { 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 = "это строка символов";
Одномерные массивы:@a = (1,2,3); @b = (4,5,6,2.5,"test"); @c = (@a,@b); $q = $c[3]; # 4
7
Немного о PerlТипы данных и переменные
Ассоциативные массивы:%a = ("test",1,"test2",2); $c = $a{test}; # $c=1 Указатели$a = 1; $p = \$a; @b = (1,2,3); $p = \@b; $p = \%c; $d = $$p{"test"};
Дескрипторы потоков данных:open IN," <kuku.txt”; read IN,$p,500; close IN;
8
Немного о PerlРегулярные выражения (сопоставление с образцом)
if($query =~ /target/) { print $query; }
http://intuit.ru/scripts/ 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<CONTENT_LENGTH;$i++) { $query[$i] = getc; } $q = join (@query); print $q;
foreach $arg (@ARGV) { print $arg; }
foreach $arg (keys %ENV) { print "$arg:$ENV{$arg}\n"; }
if ($ENV{REQUEST_METHOD} =~ /POST/) { read STDIN,$query,$ENV{CONTENT_LENGTH}; } else { $query = $ENV{QUERY_STRING}; }
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 = <RDR>; print "Это \$got:$got";
11
Немного о PerlEval(); Библиотеки:
$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(http://www.perl.com/CPAN/)
12
HTML: Form
<FORM NAME=... ACTION=url METHOD=POST|GET|PUT|... enctype=application/x-www-form-urlencoded| multipart/form-data [target=window_name] >
... </FORM>
<FORM METHOD=POST ACTION=mailto:[email protected]>
<INPUT NAME=n1 VALUE="Поле1"> <INPUT TYPE=BUTTON VALUE="Отправить"> </FORM>
13
HTML: Form
GET
<FORM ACTION=script.cgi> <INPUT NAME=n1 VALUE="Поле1"> <INPUT NAME=n2 VALUE="Поле2"> <INPUT TYPE=BUTTON VALUE="Отправить"> </FORM>
POST
<FORM METHOD=post ACTION=script.cgi> <INPUT NAME=n1 VALUE="Поле1"> <INPUT NAME=n2 VALUE="Поле2"> <INPUT TYPE=BUTTON VALUE="Отправить"> </FORM>
14
HTML: Form
SSI
<FORM> <INPUT NAME=n1 VALUE="Поле1"> <INPUT NAME=n2 VALUE="Поле2"> <INPUT TYPE=BUTTON VALUE="Отправить"> </FORM>
<FORM> <INPUT NAME=n1 VALUE="Поле1"> <INPUT NAME=n2 VALUE="Поле2"> <INPUT TYPE=BUTTON VALUE="Отправить"> <HR> <!--#exec cgi=./cgi.cgi --> </FORM>
15
HTML: Form
INPUT
<INPUT NAME="Имя" TYPE="Тип" [вариации параметров, зависящие от типа] >
<INPUT NAME="Имя" TYPE=text SIZE=number MAXLENGTH=number>
<INPUT SIZE=10 TYPE=password><INPUT MAXLENGTH=250 TYPE=hidden> <INPUT NAME=mouse TYPE=checkbox> <INPUT NAME=sex TYPE=radio VALUE=m> <INPUT TYPE=image SRC=image.gif NAME=i
ALIGN=left BORDER=0> имя_поля.x=DD&имя_поля.y=DD <INPUT TYPE=submit NAME=s>
16
HTML: Form
SELECT и OPTION
<FORM> <SELECT [size=] [MULTIPLE] name=s> <OPTION VALUE=1 selected>Понедельник <OPTION VALUE=2>Вторник <OPTION VALUE=3 selected>Среда <OPTION VALUE=4>Четверг <OPTION VALUE=5>Пятница <OPTION VALUE=6>Суббота <OPTION VALUE=7>Воскресенье </SELECT> </FORM>
17
HTML: Form
TEXTAREA
<FORM> <TEXTAREA NAME=s COLS=15 ROWS=5
WRAP=virtual> Здесь можно ввести произвольный текст </TEXTAREA>
<INPUT TYPE=submit> </FORM>
off — отключить выравнивание внутри поля; virtual — включить выравнивание, но передавать как
длинную строку; physical — включить выравнивание, но передавать
вместе с переводом строк.
18
CGI: Обработка запросов
GET ISINDEX
http://localhost/htdocs/isindex.cgi?search+ engine+world+wide+web
#!/usr/local/bin/perl print "Content-type: text/plain\n\n"; print "Запрос: $ENV{QUERY_STRING}.\n"; $n = @ARGV; for($i=0;$i<$n;++$i) { print $ARGV[$i],"\n"; }
19
CGI: Обработка запросов
GET
<FORM ACTION=test.cgi METHOD=get> Поле1:<INPUT NAME=f1 VALUE=value1> Поле2:<INPUT NAME=f2 VALUE=value2> <INPUT TYPE=submit VALUE="Послать"> </FORM>
GET /test.cgi?f1=value1&f2=value2 HTTP/1.0
$query = $ENV{“QUERY_STRING”);
20
CGI: Обработка запросов
Передача параметров через PATH_INFO
http://localhost/cgi-bin/test/arg1/arg2/arg3?param1+param2
адрес ресурса разделитель параметры
//localhost/cgi-bin/test/arg1/arg2/arg3 ? param1+param2
схема разделитель путь к ресурсу
http : //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
<!--#exec cgi="/cgi-bin/include.cgi" -->
Базовый синтаксис:
<!--#directive parameter=value parameter=value -->
Примеры:
<!--#include virtual="header.html"--> <!--#exec cgi="/cgi-bin/foo.cgi"--><!--#exec cmd="ls -l"--> <!--#echo var="REMOTE_ADDR" --> <!--#config timefmt="%y %m %d" --><!--#printenv -->
23
Server Site IncludesРасширенный синтаксис:
<!--#if expr="${Sec_Nav}" --><!--#include virtual="secondary_nav.txt" --><!--#endif -->
<!--#if expr="${Sec_Nav}" --><!--#include virtual="secondary_nav.txt" --><!--#elif expr="${Pri_Nav}}"><!--#include virtual="primary_nav.txt" --><!--#endif -->
<!--#if expr="${Sec_Nav}" --><!--#include virtual="secondary_nav.txt" --><!--#else --><!--#include virtual="article.txt" --><!--#endif -->
24
Cookies
GET /index.html HTTP/1.1Host: www.example.org
HTTP/1.1 200 OKContent-type: text/htmlSet-Cookie: name=value
GET /spec.html HTTP/1.1Host: www.example.orgCookie: name=valueAccept: */*
25
Cookies
ПРИМЕР (Ответ Google):
HTTP/1.0 302 FoundLocation: http://www.google.ru/Cache-Control: privateSet-Cookie:
PREF=ID=3cdad051f1089e67:TM=1208422078:LM=1208422078:S=M73wpRopi-laDSbf; expires=Sat, 17-Apr-2010 08:47:58 GMT; path=/; domain=.google.com
Date: Thu, 17 Apr 2008 08:47:58 GMTContent-Type: text/htmlServer: gwsContent-Length: 218Connection: Close