Apache a CGI skripty IV. - metoda GET

Dnes si probereme dekódování dat z HTML formuláře metodou GET.
Dnes si probereme dekódování dat z HTML formuláře metodou GET. Metodu poznáte podle toho, že na rozdíl od metody POST po vás nechce žádné další potvrzení odkliknutého formuláře a za jménem CGI skriptu v políčku URL www prohlížeče je seznam proměnných a parametrů.

Funkčnost
Po odkliknutí HTML formuláře se klient (www prohlížeč) spojí s CGI skriptem a automaticky odešle data.

Parametry Apache
Pro zjištění typu poslání dat z formuláře použijeme parametr REQUEST_METHOD , který nám může říct, že se jedná buďto o metodu POST, GET či PUT (zbylé dvě metody si popíšeme příště). Další důležitý parametr je QUERY_STRING, ve kterém jsou uložena odeslaná data. Tvar těchto dat si však server trochu přizpůsobil, takže jej budeme muset dekódovat.

HTML formulář
Vysvětlení parametrů formuláře je v předchozím článku.

Nyní umístěte tento HTML formulář někam na váš www server, například do C:\Program Files\Apache Group\Apache\htdocs\cgi5.html ($HOME/apache/share/htdocs/cgi5.html). Z pohledu serveru je to URL http://localhost/cgi5.html

Příklad HTML formuláře

<HTML>
  <HEAD>
  <TITLE>Formular CGI SKRIPTU 5</TITLE>
  </HEAD>
  <BODY BGCOLOR=#FFFFFF>
  
  <H1>Formular CGI SKRIPTU 5</H1>
  
  <FORM ACTION=/cgi-bin/cgi5.cgi METHOD=GET>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr1 VALUE="/Program Files/Apache Group/"><BR>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr2 VALUE="jedna dve tri"><BR>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr3 VALUE="hodnota3"><BR>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr4 VALUE="hodnota 4"><BR>
  
   <INPUT TYPE=SUBMIT VALUE="OK - Odeslat data">
   <INPUT TYPE=RESET VALUE="Vymazat formular">
  </FORM>
  
  </BODY>
  </HTML>
  

CGI skript
Dole je uvedený cgi skript, kterým můžeme dekódovat data z výše uvedeného formuláře. Stačí pokud si CGI skript uložíte do svého adresáře pro CGI skripty. V našem případě je to adresář C:\Program Files\Apache Group\Apache\cgi-bin\cgi5.cgi ($HOME/apache/share/cgi-bin/cgi5.cgi). Z pohledu serveru je to URL http://localhost/cgi-bin/cgi5.cgi

Verze CGI skriptu pro Linux/Unix je stejná jako zde uvedený příklad pro Windows, stačí pouze upravit první řádek skriptu. #!/usr/bin/perl

Popis CGI skriptu:

#popis1 – skript zjistí pomocí parametru REQUEST_METOD, zda-li se jedná o metodu GET či POST a podle toho zajistí dekódování dat. Metoda POST jej popsaná v předchozím článku, takže se zaměříme na metodu GET. Pokud bychom CGI skriptu poslali metodu PUT (pro upload souboru na server), tak ohlásí chybu (kterou máme ošetřenou v popisu 3), jelikož tento skript není na to připraven.

Vezme se řetězec, který je vidět ve Výsledku CGI skriptu v neupravených datech (viz dole) a postupně se nejdříve rozdělí do pole podle znaku & (ampresand), čímž získáme data typu promenna=hodnota , ale data stále nejsou upravená.

#popis2 – vezmeme řetězec promenna=hodnota ,kterou jsem si dekódovali a v hodnotě proměnné nahradíme znak + (plus) znakem “ “ (mezera). Dále nahradíme hexadecimální znaky jako je %2F znakem “/” (lomítko), atd.

#popis3 – výpis chybového hlášení na obrazovku

#popis4 – tisk dekódovaných a upravených parametrů

Příklad CGI skriptu

#!/perl/bin/perl.exe
  
   # popis 1
   if ($ENV{'REQUEST_METHOD'} eq 'GET') {
   @dve = split(/&/, $ENV{'QUERY_STRING'});
   } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   @dve = split(/&/, $buffer);
   } else { &error('request_method');
   }
  
   # popis 2
   foreach $druhy (@dve) {
   ($jmeno, $hodnota) = split(/=/, $druhy);
   $hodnota =~ tr/+/ /;
   $hodnota =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $hodnota =~ s/<!--(.¦\n)*-->//g;
   $promenna{$jmeno} = $hodnota;
   }
  
   # popis 3
   sub error {
   print "Content-type: text/html\n\n";
   print "<HTML>";
   print "<TITLE>Chyba</TITLE>";
   print "<H2>Chyba: Dekodovani dat neni provadeno metodou";
   print " POST ani GET</H2>";
   print "</HTML>";
   exit;
   }
  
  # popis 4
  print "Content-type: text/html\n\n";
  print "<HTML><HEAD><TITLE>CGI SKRIPT 5</TITLE></HEAD>\n";
  print "<BODY BGCOLOR=#FFFFFF>\n";
  
  print "<H2>CGI SKRIPT 5</H2>";
  print "<BR>Parametr 1: $promenna{'parametr1'} ";
  print "<BR>Parametr 2: $promenna{'parametr2'} ";
  print "<BR>Parametr 3: $promenna{'parametr3'} ";
  print "<BR>Parametr 4: $promenna{'parametr4'} ";
  
  print "<BR><BR>Neupravena data: $ENV{'QUERY_STRING'}";
  print "</BODY></HTML>\n";
  exit;
  

Výsledek CGI skriptu
Parametr 1: /Program Files/Apache Group/

Parametr 2: jedna dve tri

Parametr 3: hodnota3

Parametr 4: hodnota 4

Neupravena data:

parametr1=%2FProgram+Files%2FApache+Group%2F¶metr2=jedna+dve+tri&parametr3=hodnota3&parametr4=hodnota+4

Příště si ukážeme jak načítat data z obyčejného textového souboru a zobrazit je v HTML stránce. Pokud máte jakékoliv dotazy či připomínky zasílejte jej na adresu erik@email.cz
  

Váš názor Další článek: Internetové obchody zaznamenaly vánoční šílenství

Témata článku: Software, Prohlížeče, Programování, CGI, Head, Split, Print, HTML, Skript, Exit, Metoda, Apache, Upravený parametr, Post


Určitě si přečtěte

Windows 10 po čtyřech letech: Jsou populární, ale stále je to šílený kočkopes

Windows 10 po čtyřech letech: Jsou populární, ale stále je to šílený kočkopes

** Windows 10 tu jsou už čtyři roky, první verze dorazila 29. 7. 2015 ** Desítky měly nahradit neúspěšnou řadu Windows 8.x ** I po letech však systém budí emoce a zůstává kočkopsem

Jakub Čížek | 111

Jak doma vylepšit signál Wi-Fi: Pomůže repeater, více routerů, ale nejlépe systémy mesh

Jak doma vylepšit signál Wi-Fi: Pomůže repeater, více routerů, ale nejlépe systémy mesh

** Máte špatný signál Wi-Fi? Mesh systémy to vyřeší ** Už vás nezruinují, meziročně ceny příjemně spadly ** Jak systém funguje a čím je výjimečný?

Jiří Kuruc | 102

HTTPS byl pouze první krok. Chrome zavádí DoH, tedy šifrované DNS. Dopady mohou být obrovské

HTTPS byl pouze první krok. Chrome zavádí DoH, tedy šifrované DNS. Dopady mohou být obrovské

** Šifrovaný web je dnes už samozřejmost ** Jeden díl skládačky ale ještě chybí – DNS ** Firefox už začal a teď se na šifrované DNS chystá i Chrome

Jakub Čížek | 92

10 novinek Androidu 10, které vás budou bavit

10 novinek Androidu 10, které vás budou bavit

Jan Láska, Vladislav Kluska | 26

16 tipů a vychytávek, se kterými dokonale ovládnete komunitní navigaci Waze

16 tipů a vychytávek, se kterými dokonale ovládnete komunitní navigaci Waze

** Waze není jen navigace – je to i sociální síť s dopravními informacemi ** Mobilní aplikace skýtá široké možnosti nastavení ** Vybrali jsme pro vás 16 nejzajímavějších tipů a triků

Karel Kilián | 48



Aktuální číslo časopisu Computer

Speciál o přechodu na DVB-T2

Velký test herních myší

Super fotky i z levného mobilu

Jak snadno upravit PDF