1 / 25

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

Учебный курс Основы Web- технологий Лекция 6 CGI и Perl. SSI и Cookies. кандидат технических наук Павел Брониславович Храмцов paul@kiae.su. CGI- скрипты и Perl. Вывод данных: #!/usr/bin/perl print “ Content-type: text/plain<br><br>Hello Perl!<br> ” Стандартный поток вывода

anika-salas
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 "<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. Немного о 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(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:help@intuit.ru> <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=value2HTTP/1.0 $query = $ENV{“QUERY_STRING”);

  20. CGI: Обработка запросов Передача параметров через PATH_INFO http://localhost/cgi-bin/test/arg1/arg2/arg3?param1+param2

  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.1 Host: www.example.org HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value Accept: */*

  25. Cookies ПРИМЕР (Ответ Google): HTTP/1.0 302 Found Location: http://www.google.ru/ Cache-Control: private Set-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 GMT Content-Type: text/html Server: gws Content-Length: 218 Connection: Close

More Related