|
|||||||||||
Jak zpracovat zasφlanß dataJak ji₧ bylo uvedeno v²Üe, skript m∙₧e dostat dv∞mi metodami. Ka₧dß metoda mß svΘ v²hody a nev²hody. Prvnφ metodou je GET. Mezi jejφ v²hody pat°φ to, ₧e ze starny prohlφ₧eΦe se dß pou₧φt u jekΘhokoliv odkazu. VÜechna data se tedy zasφlajφ p°ipojenß k URL. Jednotlivß polφΦka jsou p°edßna ve form∞ nßzev=hodnota a jsou odd∞lena znakem " &". Aby to bylo slo₧it∞jÜφ, jsou specißlnφ znaky vyskytujφcφ se v hodnotßch prom∞nn²ch zak≤dovßny nßsledujφcφm zp∙sobem:
áááJednotlivΘ prohlφ₧eΦe se mφrn∞ liÜφ v tom, kterΘ znaky k≤duji, ale uvedenß pravidla platφ obecn∞. Pro dek≤dovßnφ tedy staΦφ v²skyty znaku "+" nahradit mezerami a v²skyty kombinacφ "%hh" nahradit znakem s p°φsluÜn²m ASCII k≤dem. Snadno tedy dek≤dujeme °et∞zec: Ahoj%20lidi%21. Data jsou k URL p°ipojovßny na konec pomocφ znaku "?". Adresa pak tedy m∙₧e vypadat nßsledovn∞: http://www.server.cz/cgi-bin/mujskript.cgi?polozka1=data1&polozka2=data2.
áááMetoda GET je vÜak nevhodnß z n∞kolika d∙vod∙. Nap°φklad pokud po₧adujeme jmΘno a heslo, tak to je pak viditelnΘ v URL. Tak₧e ka₧d² kdo se koukne n∞komu p°es rameno, uvidφ tyto informace. Druhou nev²hodou je to, ₧e prohlφ₧eΦe nepodporujφ nekoneΦnΘ URL a proto i data nejsou omezenß. áááOproti tomu metoda POST tyto metody odstr≥uje. Nev²hodou je vÜak to, ₧e data v₧dy musφ pochßzet z formulß°e. Nelze je tedy zaslat nap°φklad z odkazu. áááJako p°φklad zde uvßdφme Φßst programu, kter² Φte data do pole $DATA{'nßzev polo₧ky'} jak z volßnφ metodou POST tak GET sub ctidata { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); if ($ENV{'QUERY_STRING'}) {$buffer = "$buffer\&$ENV{'QUERY_STRING'}";} @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $DATA{$name} = $value; } } |
|||||||||||
|