Introduction
Lorsqu'on veut dynamiser un peu un site web, ou faire un traitement complexe, on pense toujours à PHP ou aux JSP. Mais il suffit parfois de mettre en oeuvre ses compétences en scripting et utiliser les CGI pour atteindre son but.
Les CGI ont mauvaise réputation en matière de sécurité, ce n'est pas toujours justifié. Il faut juste vérifier ce que le client transmet au serveur, comme on le ferait en PHP.
Serveur
Un serveur web est nécessaire pour exécuter le script CGI. Des configurations sont généralement à prévoir pour activer cette fonctionnalité.
La plupart des serveurs possèdent un dossier cgi-bin à la racine. Il suffit de mettre son script dedans et d'y faire appel.
Si on veut plus de personnalisation, il est possible de permettre l'exécution des scripts CGI dans un répertoire particulier. Voici un exemple de mon fichier de configuration personnel sous Mac OS X.
Options +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Bon, c'est très permissif, ne surtout pas utiliser une configuration pareille en production, vous risquerez d'avoir des problèmes.
Script
Voici donc un script en Bash permettant de fournir une réponse à la demande du serveur.
Pour émettre des données, il est nécessaire de commencer par ces deux lignes.
La seconde ligne vide est indispensable et symbolise le début de la communication. Ça fait partie de la RFC1945.
#!/bin/bash
echo "Content-type: text/html"
echo ""
Si on veut traiter des paramètres à la manière des variables $_GET et $_POST en PHP, il faut utiliser la variable $QUERY_STRING.
Pour séparer les arguments de cette chaîne de caractères on utilise les outils classiques. Ici sed nous permet de récupérer dans la variable CMD tout le contenu de la variable niv
#!/bin/bash
CMD=`echo "$QUERY_STRING" | sed -n 's/^.*niv=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
echo "Content-type: text/html"
echo ""
echo $CMD