0% found this document useful (0 votes)
87 views38 pages

Programare Perl

The document discusses programming in Perl for creating CGI scripts. It covers Common Gateway Interface (CGI) scripts, including their characterization, environment variables, invocation via GET and POST methods, and examples using Perl's CGI module. The key topics are: 1. CGI scripts allow dynamic content generation on the server in response to client web requests. They are typically written in Perl, C, or other interpreted/compiled languages. 2. CGI scripts access environment variables for information like the request method and query string. GET passes data via the URL; POST passes it via stdin. 3. The Perl CGI module simplifies CGI scripting through functions for HTML generation, parameter retrieval, and other tasks. It allows procedural

Uploaded by

Marcel Chis
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
87 views38 pages

Programare Perl

The document discusses programming in Perl for creating CGI scripts. It covers Common Gateway Interface (CGI) scripts, including their characterization, environment variables, invocation via GET and POST methods, and examples using Perl's CGI module. The key topics are: 1. CGI scripts allow dynamic content generation on the server in response to client web requests. They are typically written in Perl, C, or other interpreted/compiled languages. 2. CGI scripts access environment variables for information like the request method and query string. GET passes data via the URL; POST passes it via stdin. 3. The Perl CGI module simplifies CGI scripting through functions for HTML generation, parameter retrieval, and other tasks. It allows procedural

Uploaded by

Marcel Chis
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 38

Programare Perl

Programare Perl Realizarea de scripturi CGI


Sabin-Corneliu Buraga Facultatea de Informatica, UAIC, Romania http://www.infoiasi.ro/~busaco/

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

Miracles happen to those who believe in them.

Bernard Berenson

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

Cuprins
Scripturi CGI (Common Gateway Interface) SSI (Server Side Includes) Programare Web in Perl via modulul CGI
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 3

Programare Perl

Cuprins
Scripturi CGI (Common Gateway Interface)
Caracterizare Variabile de mediu Invocare GET versus POST
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 4

Programare Perl

CGI | caracterizare
Standard de facto pentru interactiunea programatica a clientilor cu serverele Web: CGI/1.1 Scop: generarea dinamica pe server de reprezentari ale unor resurse solicitate de un client Web Un program (script) CGI se invoca pe server, in mod implicit sau explicit (i.e. preluarea informatiilor dintr-un formular)
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 5

HTML, text obisnuit, imagini JPEG etc.

Programare Perl

CGI | caracterizare
Scripturile CGI pot fi concepute in orice limbaj disponibil pe server
Limbaje interpretate: bash, Perl (modulul CGI), Python, Pike,... Limbaje compilate: C, C++,...

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

CGI | programe
Un script CGI scrie datele la iesirea standard (stdout) Un script CGI genereaza/foloseste anteturi HTTP, utilizind standardul MIME exemplu: Content-type: text/html Unui program CGI, datele de procesat i se vor trimite la intrarea standard sau prin intermediul unor variabile de mediu Detalii: http://hoohoo.ncsa.uiuc.edu/cgi
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 7

Programare Perl

CGI | variabile/1
Un program CGI are acces la variabilele de mediu:
Independente de metoda cererii: SERVER_NAME, GATEWAY_INTERFACE Specifice cererilor transmise spre script: SERVER_PROTOCOL, REQUEST_METHOD, QUERY_STRING, REMOTE_HOST, REMOTE_ADDR, CONTENT_TYPE, CONTENT_LENGTH
8

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

CGI | variabile/2
Variabile suplimentare: HTTP_ACCEPT, HTTP_USER_AGENT,... Exemplu de script CGI care afiseaza variabilele de mediu:
#!/usr/bin/perl # Afiseaza mediul print "Content-type: text/plain\n\n"; print "Environment:\n\n"; foreach $key (keys %ENV) { printf "%16s = %s\n", $key, $ENV{$key}; }
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

variabile.cgi cu drepturi de citire si executie


9

Programare Perl

CGI | invocare/1
#!/usr/bin/perl print Content-type: text/html print print <p>Salut din CGI!</p>
salut.cgi stocat in ~/html/

Invocare directa (prin GET): http://domeniu/~utilizator/salut.cgi


Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 10

Programare Perl

CGI | invocare/2
<form action=http://www.infoiasi.ro/cgi-bin/max.cgi method=GET> <p>Va rugam, introduceti doua numere: <input name="nr1" size="5 /> <input name="nr2" size="5 /> </p> <p> <input type="submit" value="Afla maximul" /> </p> </form> Invocare dintr-un formular interactiv (GET sau POST)
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 11

Programare Perl

CGI | invocare/3
URL special (cazul GET)

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

12

Programare Perl

CGI | invocare/4
Pentru fiecare cimp al formularului, se genereaza o pereche nume_cimp=valoare delimitata de & care va fi adaugata URL-ului unde este stocat programul CGI: http://www.infoiasi.ro/cgi-bin/max.cgi?nr1=7&nr2=4 Acest URL este codificat (%hexa, spatiul devine +) URL encoding Serverul va invoca scriptul CGI pasindu-i datele la intrarea standard sau via variabile de mediu
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 13

Programare Perl

CGI | invocare/5
Procesarea datelor prin metoda GET
Datele vor fi disponibile in variabila QUERY_STRING

Procesarea datelor prin metoda POST


Datele vor fi accesate de la intrarea standard (stdin), lungimea in octeti a datelor primite fiind stocata in variabila CONTENT_LENGTH

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

14

Programare Perl

CGI | invocare/6
Procesul de invocare a scripturilor CGI

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

15

Programare Perl

CGI | GET
# preluam sirul de interogare # din variabila de mediu QUERY_STRING $interogare = $ENV{'QUERY_STRING'} || die "Sir de interogare vid!\n"; %parametri = &analiza_parametri ($interogare); # preluam valorile parametrilor $nr1 = $parametri{'nr1'}; $nr2 = $parametri{'nr2'}; $max = ($nr1 > $nr2) ? $nr1 : $nr2; print "<p>Maximul dintre $nr1 si $nr2 este: $max</p>\n";
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 16

Programare Perl

CGI | GET
sub analiza_parametri { local ($interogare) = @_; local (@perechi) = split('&', $interogare); # perechi 'camp=valoare' local ($parametru, $valoare, %parametri); foreach (@perechi) { ($parametru, $valoare) = split('='); # valoarea & numele de camp $parametru = &unescape($parametru); # decodificam valorile $value = &unescape ($value); if ($parametri{$parametru}) { # memoram in tabloul 'parametri' $parametri{$parametru} .= "$;$valoare"; } else { $parametri{$parametru} = $valoare; } } # final de foreach return %parametri; }
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 17

Programare Perl

CGI | GET
sub unescape { # functie de decodificare local ($sir) = @_; $sir =~ tr/+/ /; # "+" devine spatiu # %HH devine caracter ASCII $sir =~ s/%([0-9A-Fa-f]{2})/pack("c", hex($1))/ge; return $sir; }
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 18

Programare Perl

CGI | POST
In cazul folosirii metodei POST, preluam parametrii de interogare de la intrarea standard (STDIN): read(STDIN, $interogare, $ENV{'CONTENT_LENGTH'}); Restul programului CGI este similar celui precedent
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 19

Programare Perl

CGI | GET vs. POST


Metoda GET se foloseste pentru generarea de reprezentari ale resurselor cerute (starea serverului nu trebuie sa se modifice) Metoda POST se utilizeaza atunci cind datele transmise serverului au dimensiuni mari (continut de fisiere) sau sint delicate (e.g., parole); de asemenea, cind invocarea scriptului poate conduce la modificari ale starii pe server (adaugarea unei inregistrari, alterarea unui fisier,...) Folosind GET, se poate stabili un bookmark pentru acces ulterior la o resursa Web
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 20

Programare Perl

Server Side Includes


Ofera posibilitatea executiei scripturilor CGI si a altor actiuni, direct dintr-un document Web Comenzi (directive) SSI: <!--#directiva --> Fisierele continind directive SSI au extensia .shtml
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 21

Programare Perl

Server Side Includes


Comenzi uzuale:
echo afiseaza valoarea anumitor variabile <p>Data si timpul: <!--#echo var="DATE_LOCAL"--></p> <p>Legtura prin care s-a ajuns aici este <!--#echo var="HTTP_REFERER" --></p> <p>Numele acestui document este <!--#echo var="DOCUMENT_NAME" --></p>
22

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

Server Side Includes


Comenzi uzuale:
echo afiseaza valoarea anumitor variabile

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

23

Programare Perl

Server Side Includes


Comenzi uzuale:
flastmod furnizeaza data ultimei modificari a unui fisier <p>Ultima modificare: <!--#flastmod file=web.html--></p> fsize furnizeaza marimea unui fisier <!--#fsize file="index.html" -->
24

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

Server Side Includes


Comenzi uzuale: exec executa un script CGI
(nu este permisa pentru IIS)
<!--#exec cgi=citat.pl.cgi -->

include include un fisier


<!--#include file=antet.html.inc -->

Atentie la probleme de securitate ce pot aparea!


Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 25

Programare Perl

Cuprins
Programare Web in Perl via modulul CGI
Prezentare generala Preluarea parametrilor Redirectarea clientului Alte metode utile Exemple
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 26

Programare Perl

Modulul CGI
Ofera rutine/metode pentru dezvoltarea comoda a scripturilor CGI Generare de cod HTML maniera procedurala
#!/usr/bin/perl use CGI qw/:standard/; # utilizare CGI standard print header(); # trimitem antetul HTTP # afisam antetul paginii Web print start_html(-title => "Un salut"); print h1('Salut!'), p('Un paragraf...'); # diferite elemente HTML # afisam finalul de document print end_html();
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 27

Programare Perl

Modulul CGI
Generare de cod HTML maniera obiectuala
#!/usr/bin/perl use CGI; # utilizam modulul CGI $c = new CGI; # instantiem obiectul CGI print $c->header(); # trimitem antetul HTTP # afisam antetul paginii Web print $c->start_html(-title => "Un salut"); print $c->h1('Salut!'), $c->p('Un paragraf...'); # diferite tag-uri HTML # afisam finalul de document print $c->end_html();
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 28

Programare Perl

Modulul CGI
Preluarea parametrilor transmisi scriptului
Se foloseste param()
@parametri = $c->param(); # lista parametrilor disponibili print @parametri; $nume = $c->param('nume'); if ($nume != 'Admin') { print '<p>Nume incorect...</p>'; }
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 29

Programare Perl

Modulul CGI
Redirectarea clientului
# redirectare in functie de limba if ($limba eq 'ro') print $c->redirect('/index.ro'); else print $c->redirect('/index.en');

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

30

Programare Perl

Modulul CGI
Trimiterea antetului HTTP
# trimite Content-type: image/gif print $c->header('image/gif');

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

31

Programare Perl

Modulul CGI
Alte metode:
query_string() sirul de interogare pt. GET remote_addr() adresa IP a masinii-client remote_host() adresa simbolica/domeniul clientului request_method() cererea HTTP realizata user_agent() informatii privitoare la programul-client (browser-ului) cookie() acces la cookie-uri
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 32

Programare Perl

Modulul CGI
Alte functii utile:
escape() genereaza un sir codificat in stilul URI (caracterele speciale sunt substituite de %NN) unescape() decodifica un sir codificat cu functia escape() escapeHTML() genereaza un sir codificat in stilul HTML (caracterele speciale sunt inlocuite cu entitatile &lt; &gt; &amp; in loc de < > &) unescapeHTML() decodifica un sir codificat cu escapeHTML()
33

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

Modulul CGI | exemplu


Afiarea unei imagini aleatoare
#!/usr/bin/perl # afiseaza continutul unui fisier grafic ales aleatoriu use CGI qw/:standard/; # constante folosite pentru specificarea # directoarelor care contin imagini $DIR_RADACINA = '.'; $DIR_IMAGINI = 'img'; chdir "$DIR_RADACINA/$DIR_IMAGINI" or die "directorul de imagini e inaccesibil."; # preluam intr-un tablou fisierele JPEG, GIF si PNG @imagini = <*.{jpg,gif,png}>;
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 34

Programare Perl

Modulul CGI | exemplu


Afiarea unei imagini aleatoare (cont.)
# alegem imaginea $imagine = $imagini [rand (@imagini)]; die "eroare la selectarea imaginii" unless $imagine; # redirectam navigatorul spre imaginea aleasa print redirect ("$DIR_IMAGINI/$imagine");

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

35

Programare Perl

Alte module utile


Pentru procesarea continutului HTML: modulul HTML::Parser Pentru preluarea continutului resurselor Web: modulul LWP (Library for Web access in Perl) Pentru redirectarea mesajelor de eroare spre un fisier de jurnalizare ori spre browser: modulul CGI::Carp
use CGI::Carp qw(fatalsToBrowser); die "O eroare intentionata...";

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

36

Programare Perl

Perl
Exercitii
Sa se scrie un script CGI care sa afiseze un citat celebru ales aleatoriu dintr-o lista, in functie de localizarea geografica a vizitatorilor Sa se conceapa o aplicatie Web care sa ofere vizitatorilor posibilitatea de a-si partaja si organiza colectiile multimedia personale (stocate pe CD/DVD-uri); se vor putea realiza si cautari conform unor criterii (simple sau multiple) furnizate de utilizator, eventual recurgindu-se la expresii regulate
37

Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/

Programare Perl

Rezumat
Scripturi CGI (Common Gateway Interface) SSI (Server Side Includes) Programare Web in Perl via modulul CGI
Sabin-Corneliu Buraga www.infoiasi.ro/~busaco/ 38

You might also like