Elles offrent un moyen d'interaction entre le navigateur du client et
le serveur de web.
Elles permettent de récupérer le contenu saisi
par le client. Les modalités de
récupération sont très
différentes.
Le contenu saisi sera
récupéré, dans une variable texte, par
l'intermédiaire du STDIN ce qui est possible en Gforth.
Variable_texte longueur_du_flot stdin read-file throw
On remarque ici que longueur_du_flot doit être connu avant.
Il faudra le récupérer via la variable
d'environnement CONTENT_LENGTH.
Le contenu saisi sera
récupéré, dans une variable texte, par
l'intermédiaire de la variable d'environnement QUERY_STRING.
C'est la méthode utilisée ici.
Le programme cuicui3.fs réalise de nombreuses actions utiles.
#! /usr/local/bin/gforth
256 Constant environ Create boite environ allot
1024 Constant flot Create texte flot allot
variable lg 0
: affecte ( adr1 u adr2 -- ) swap dup lg ! cmove ;
s" QUERY_STRING" boite affecte
s" env" system ( affiche l'ensemble des vaiables d'environnement
actives )
drop ( élimine une valeur inutile de la pile )
SERVER_SIGNATURE=<address>Apache-AdvancedExtranetServer/2.0.47
(Mandrake Linux/6mdk) mod_perl/1.99_09 Perl/v5.8.1 mod_ssl/2.0.47
OpenSSL/0.9.7b PHP/4.3.2 Server at 127.0.0.1 Port
80</address>
HTTP_KEEP_ALIVE=300
HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.4)
Gecko/20030630
HTTP_HOST=localhost
SERVER_PORT=80
HTTP_ACCEPT_CHARSET=ISO-8859-1,utf-8;q=0.7,*;q=0.7
DOCUMENT_ROOT=/var/www/html
SCRIPT_FILENAME=/var/www/cgi-bin/coucou2.cgi
REQUEST_URI=/cgi-bin/coucou2.cgi?nom=Bonjour&prenom=Les+amis
SCRIPT_NAME=/cgi-bin/coucou2.cgi
HTTP_CONNECTION=keep-alive
REMOTE_PORT=32834
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
_=/bin/env
SERVER_ADMIN=root@localhost
PWD=/var/www/cgi-bin
HTTP_ACCEPT_LANGUAGE=en-us,en;q=0.5
HTTP_REFERER=http://localhost/formul1.html
HTTP_ACCEPT=text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
REMOTE_ADDR=127.0.0.1
SERVER_NAME=127.0.0.1
SHLVL=2
SERVER_SOFTWARE=Apache-AdvancedExtranetServer/2.0.47 (Mandrake
Linux/6mdk) mod_perl/1.99_09 Perl/v5.8.1 mod_ssl/2.0.47 OpenSSL/0.9.7b
PHP/4.3.2
QUERY_STRING=nom=Bonjour&prenom=Les+amis
SERVER_ADDR=127.0.0.1
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
HTTP_ACCEPT_ENCODING=gzip,deflate
REQUEST_METHOD=GET
On remarque ici de nombreuses informations.
Retenons en particulier :
REQUEST_METHOD=GET, ce qui confirme la méthode
utilisée
QUERY_STRING=nom=Bonjour&prenom=Les+amis, c'est le
résultat que nous allons traiter en retour,
Le nom de cette variable a été affecté
à "boite".
Il suffit d'utiliser le mot Gforth getenv. On vérifie
l'état de la pile par .s
Cela donne :
boite lg @ getenv
.s
<2> -1073742010 27
Dans l'ordre :
adresse du contenu saisi
longueur de la chaîne.
texte affecte
texte lg @ type
nom=Bonjour&prenom=Les+amis
Il faut maintenant séparer les différents champs,
en utilisant &.
Remarquons ici une difficulté : que faire si le texte saisi
contient & ?
Une solution est de prendre ici &prenom= qui est moins ambigu,
mais aussi moins généraliste.
Haut de page