POST és GET paraméterek

A cgi processz környezeti változóként kapja meg a http kérés GET paramétereit, azaz azt a füzért, amelyik általában az URL-ben a kérdőjel után áll. A szabványos bemeneten pedig megjelenik a http kérés POST paramétere, azaz az az állomány, amely a http kérés fejléce után következik egészen a HTTP kérés végéig.

Egy URL-ben, például a http://altavizsla.matav.hu?mss=simple esetén, ami a kérdőjel után áll, az a cgi processz GET paramétere lesz. De nem csak ez a módja a GET paraméterek előállításának. Amikor egy böngésző egy kitöltött formot küld el a szervernek, és a form metódusa GET, akkor ez is a QUERY_STRING környezeti változóban jelenik meg a cgi processznél. Például a

<form method=GET action="http://www.emma.hu/cgitutorial/showparam.pl">
kakukk: <input type=text name=kakukk><BR>
szarka: <input type=text name=szarka><BR>
<input type=submit value="Ezt kell megnyomni!">
</form>
kakukk:
szarka:
form esetén, amely a
#!/usr/bin/perl
$get_parameter = $ENV{'QUERY_STRING'};
read STDIN, $post_parameter,$ENV{'CONTENT_LENGTH'};
require 'state.pl';
print_http_state('200 OK');
print <<END;
Content-type: text/html

<HTML>
<BODY>
<h1>GET és POST paraméterek</h1>
<HR>
GET paraméter:<BR>
$get_parameter
<HR>
POST paraméter:<BR>
$post_parameter
</BODY>
</HTML>
END

programot indítja el az eredmény:

GET és POST paraméterek


GET paraméter:
kakukk=a+kakukk+egy+mad%F3r&szarka=a+szarka+is
POST paraméter:

Egy fontos dolgot már most érdemes észrevenni: a POST paramétert a szabványos bemenetről a CONTENT_LENGTH környezeti változó által megadott hosszban olvassuk be, és nem fájlvégjelig. Fájlvége jel ugyanis nincs a szabványos bemeneten a cgi programoknál.

A másik dolog az az, hogy a form mezőit a böngésző kódolta. Minden szóköz, és nemnyomtatható karaktert átalakított %xx alakúra, ahol xx a karakter hexa ascii kódja. Minden szóköz helyett + jelet rakott, és az egyes paramétereket & jellel fűzte össze. Ezen kívül még megteszi azt a szívességet is, hogy a form paraméterek neveit és a megadott értékeket egyenlőségjellel köti össze.

Mielőtt megnéznénk, hogy hogyan kell ezeket dekódolni, nézzük meg a következő példát, amely még mindig GET paramétereket tartalmaz, de most már legyen a form-ban action-ként megadott program neve mögött is paraméter.

<form method=GET action="http://www.emma.hu/cgitutorial/showparam.pl?birka=nem+mad%F3r">
kakukk: <input type=text name=kakukk><BR>
szarka: <input type=text name=szarka><BR>
<input type=submit value="Ezt kell megnyomni!">
</form>
kakukk:
szarka:
A válasz nem különbözik az előző példától, azaz a böngésző, nem veszi figyelembe az URL után írt paramétereket.

Ugyanez a példa POST paraméterrel:

<form method=POST action="http://www.emma.hu/cgitutorial/showparam.pl">
kakukk: <input type=text name=kakukk><BR>
szarka: <input type=text name=szarka><BR>
<input type=submit value="Ezt kell megnyomni!">
</form>
kakukk:
szarka:
és az eredmény:

GET és POST paraméterek


GET paraméter:

POST paraméter:
kakukk=mad%E1r&szarka=mad%F3r Ha most a második példának megfelelő POST pareméteres formot próbáljuk,
<form method=POST action="http://www.emma.hu/cgitutorial/showparam.pl?birka=nem+mad%F3r">
kakukk: <input type=text name=kakukk><BR>
szarka: <input type=text name=szarka><BR>
<input type=submit value="Ezt kell megnyomni!">
</form>
kakukk:
szarka:
akkor most már lesz POST és GET paraméterünk is:

GET és POST paraméterek


GET paraméter:
birka=nem+mad%F3r
POST paraméter:
kakukk=mad%EDr&szarka=szint%FCn Nézzük meg, hogy hogy hogyan kell dekódolni ezeket a paramétereket.

Verhás Péter Home Page . . . . . . CGI röviden, tartalomjegyzék