Envoi de données à une application CGI
Appel à une application CGI
Le moyen le plus simple d'appeler une application CGI est de taper l'URL
du programme dans le champ location du navigateur. Nous avons placer
un script dos cgitest.bat dans le répertoire d:\base\httpd\cgi-bin.
Pour le faire fonctionner, il suffit de taper http://www.brunette.brucity.be/cgi-bin/cgitest.bat
dans la fenêtre location d'un naviagteur.
Une autre méthode consiste à créer un hyperlien
tel que
<A HREFF="cgi-bin/cgitest.bat">Cliquer ici pour exécuter
cgitest.bat</A>,
ce qui donne
Cliquer
ici pour exécuter cgitest.bat.
Pour une application Perl placée dans le même répertoire
il est nécessaire d'appeler l'interprêteur perl.exe. Ceci
ce faire via l'hyperlien
<A HREFF="cgi-bin/perl.exe?stest.pl">Cliquer ici pour exécuter
stest.pl</A>,
ce qui donne
Cliquer
ici pour exécuter stest.pl.
Si le script se trouve dans un sous-répertoire de d:\base\httpd\cgi-bin,
par exemple C:\WWWSRV\httpd\cgi-bin\reptest, l'URL correspondant
est http://www.brunette.brucity.be/cgi-bin/perl.exe?reptest/stest.pl.
A titre d'information voici les sources des exemples utilisés.
cgitest.bat :
@echo off
Content-type: text/plain
type blank-line.txt
echo Salut ç ç é !
où blank-line.txt est un fichier texte ne contenant qu'une ligne
vide.
stest.pl :
print "Content-type: text/html", "\n\n";
print "Ce script est exécuté", "\n";
exit(0);
Les URLs vers une application CGI
Les URLs vers une application CGI peuvent être divisés en
3 parties :
[chemin virtuel][information externe au chemin]?[demande].
-
Le chemin virtuel (virtual path) est constitué
de l'adresse DNS ou IP du serveur suivie de cgi-bin, du répertoire
ciblé s'il y a lieu et de l'exécutable.
-
L'information externe au chemin (extra path information)
se place après le nom du programme. Elle a 2 usages :
-
elle transmet des informations constantes au serveur indépendamment
de formulaires remplis au niveau du client,
-
elle sert à traduire un chemin virtuel d'un document en un chemin
complet dirigé vers une variable d'environnement (PATH-INFO).
-
La demande (query string) est optionnelle. Elle est générée
par le marqueur <FORM>. Dans le cas ou l'attribut de FORM,
METHOD, prend la valeur GET les données sont transmise via le query
string vers la variable d'environnement QUERY_STRING. Si METHOD prend
la valeur POST les données sont envoyées sur l'entrée
standard. Voici la syntaxe utilisée dans le QUERY_STRING : variable1=valeur1&variable2=valeur
... variableN=valeurN. Si les noms ou les valeurs des variables contiennent
&, = ou tout autre caractère spécial, on utilise le codage
suivant : %xx où xx désigne le nombre, en base hexadécimale,
du code HTML numérique pour les caractères spéciaux.
Ceci donne
Les variables d'environnements
-
SERVER_SOFWARE : donne le nom et la version du serveur Web utilisé.
-
SERVER_NAME : donne l'IP ou la DNS du serveur.
-
SERVER_URL : donne l'URL d'accès au serveur.
-
GATEWAY_INTERFACE : donne la version du CGI utilisé.
-
SERVER_PROTOCOL : donne le nom et la version du protocole utilisé
par le serveur et le client.
-
SERVER_PORT : donne le numéro de la porte par laquelle la
requête est passée.
-
REQUEST_METHOD : donne la valeur de l'attribut METHOD du marqueur
FORM utilisé lors de la requête CGI.
-
PATH_INFO : donne l'extra path information utilisée.
-
PATH_TRANSLATED : donne une traduction d'un chemin virtuel passé
dans l'extra path information.
-
SCRIPT_NAME : donne le chemin virtuel du script utilisé.
-
QUERY_STRING : donne les informations passées par un marqueur
<FORM METHOD=GET>.
-
REMOTE_HOST : donne la DNS du client.
-
REMOTE_ADDR : donne l'IP du client.
-
CONTENT_TYPE : donne le type de donnée transmise par le client
si l'attribut METHOD a pour valeur POST.
-
CONTENT_LENGTH : donne le nombre de bytes transmis par le client.
-
HTTP_ACCEPT : énumère les types de données
que le client peut accepter.
-
HTTP_USER_AGENT : identifie le software de navigation utilisé
par le client.
-
HTTP_IF_MODIFIED_SINCE : date d'une première requête
CGI.
-
HTTP_FROM : donne l'adresse électronique implémentée
avec le navigateur.
Les en-têtes HTTP
Presque toute les applications CGI doivent produire en première
ligne une en-tête HTTP qui indique au client quel type de donnée
lui est destinée via la sortie standard. Seules les applications
appelées depuis le serveur même sont exemptées d'en-tête
HTTP.
|
Type de réponse
|
En-tête HTTP
|
| Texte. |
Content_type: text/plain |
| Page HTML. |
Content_type: text/html |
| Image gif. |
Content_type: image/gif |
| Redirection vers une autre page Web. |
Location: http://www.brunette.brucity.be |
| Message d'erreur. |
Statut: 402 |
Attention une en-tête HTTP doit être suivie d'une ligne vide.
Voici un exemple d'une première ligne d'un script Perl :
print("Content_type:text/html\n\n"); .
suite-index