Учебный курс Основы web- технологий Лекция 6 cgi и perl. ssi ...

25
1 Учебный курс Основы Web-технологий Лекция 6 CGI и Perl. SSI и Cookies кандидат технических наук Павел Брониславович Храмцов [email protected]

Upload: anika-salas

Post on 01-Jan-2016

48 views

Category:

Documents


2 download

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 Presentation

TRANSCRIPT

Page 1: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

1

Учебный курс

Основы Web-технологий Лекция 6

CGI и Perl. SSI и Cookies

кандидат технических наукПавел Брониславович Храмцов

[email protected]

Page 2: Учебный курс Основы  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>";

Page 3: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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}"; }

Page 4: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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"; }

Page 5: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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.";

Page 6: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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

Page 7: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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;

Page 8: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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;

Page 9: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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}; }

Page 10: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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";

Page 11: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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/)

Page 12: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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>

Page 13: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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>

Page 14: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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>

Page 15: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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>

Page 16: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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>

Page 17: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

17

HTML: Form

TEXTAREA

<FORM> <TEXTAREA NAME=s COLS=15 ROWS=5

WRAP=virtual> Здесь можно ввести произвольный текст </TEXTAREA>

<INPUT TYPE=submit> </FORM>

off — отключить выравнивание внутри поля; virtual — включить выравнивание, но передавать как

длинную строку; physical — включить выравнивание, но передавать

вместе с переводом строк.

Page 18: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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"; }

Page 19: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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”);

Page 20: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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

Page 21: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

21

CGI: Обработка запросов

Стандартные библиотеки разбора данных

CGI.pm — полный набор функций для генерации HTML-файлов с формами и разбора запросов CGI-скриптами.

CGI_Lite — это средство работы с составными (multipart/form-data) запросами. При работе с функциями данного модуля следует иметь в виду, что временные файлы эти функции размещают в каталоге /tmp.

Page 22: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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 -->

Page 23: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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 -->

Page 24: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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: */*  

Page 25: Учебный курс Основы  Web- технологий Лекция  6 CGI  и  Perl. SSI  и  Cookies

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