Variables d'environnement vues d'Apache


Elles offrent un moyen d'interaction entre le navigateur du client et le serveur de web.

1. Méthodes POST et GET


Elles permettent de récupérer le contenu saisi par le client. Les modalités de récupération sont très différentes.

1.1 POST

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.

1.2. GET

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.

2. Récupération de la saisie


Le programme cuicui3.fs réalise de nombreuses actions utiles.

2.1. Initialisations et affichage des variables d'environnement


#! /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 )

2.2. Résultat obtenu en retour sur le navigateur du client

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,

2.3. Capturer le contenu de la variable QUERY_STRING


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.4. Résultat obtenu


<2> -1073742010 27
Dans l'ordre :
adresse du contenu saisi
longueur de la chaîne.

2.5. Récupérer la saisie et l'afficher


texte affecte
texte lg @ type

2.6. Résultat obtenu


nom=Bonjour&prenom=Les+amis

3. Aller plus loin


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