Exercice 2 : scripts CGI

Transcription

Exercice 2 : scripts CGI
Exercice 2 : scripts CGI
Dans la majorité des cas, le client Web effectue une simple requête d'u
ne page existante.
Dans certains autres cas (commander des billets de train, payer en ligne, ...) il est nécessaire de fournir un certain nombre d'informations, qui ne sont plus prises en compte directement par le serveur Web, mais par une application spécifique (côté serveur). Certaines pages Web seront donc dotées d'un mécanisme permettant d'assurer les transfert de ces informations vers cette application. En retour, une fois que l'application aura effectué son traitement, elle doit transmettre son résultat au serveur qui le présentera à l'internaute sous la forme d'une nouvelle page Web.
L'interface CGI (Common Gateway Interface) est une passerelle qui permet aux serveurs Web de communiquer avec d'autres logiciels tournant sur le même ordinateur. Avec CGI on peut écrire des scripts Perl, Tcl, Python, Ruby, Shell, voire des programmes compilés (en langage C, C++ ou Fortran).
CGI permet donc de générer des pages Web dynamiquement en fonction des données transmises par l'utilisateur et permet de créer des services d'inscription en ligne, des outils de recherche dans les bases de données, etc.
I – Mon premier script CGI
1. Créez le répertoire $HOME/public_html/cgi-bin/. Récupérez les 5 scripts situés sur ma page Web dans le répertoire cgi et mettez­les dans votre répertoire cgi-bin/.
2. Commencez par le script python3.py. Ouvrez­le dans un éditeur de texte et essayez de comprendre ce qu'il est censé faire. Exécutez­le normalement (comme au premier semestre: python3 python3.py). Ce script produit du HTML sur sa sortie standard, précédé d'une ligne de texte. Si c'est OK, poursuivez.
3. Rendez ce fichier exécutable : chmod +x python3.py et, vous pouvez donc désormais le lancer comme n'importe quel autre programme en tapant directement : python3.py.
Peut­être devez­vous taper ./python3.py si le répertoire courant ( . ) ne figure pas dans votre variable d'environnement PATH. Testez. Si c'est OK, poursuivez.
4. Ouvrez votre navigateur internet et allez à la page :
http://prenom.nom.etu.perso.luminy.univ-amu.fr/cgi-bin/python3.py
Est­ce que ce que vous voyez à l'écran vous semble correct ? Allez regarder dans le menu Affichage/Code source de la page pour comparer le code source HTML de la page à ce que vous avez demandé d'afficher dans votre script. Ils doivent être identiques.
5. Ouvrez les autres scripts (shell, perl, tcl) et le programme C dans un éditeur de texte, puis testez­les. Attention, là aussi il faut rendre les scripts exécutables.
•
Pour compiler un programme C (pour traduire le code source en fichier binaire exécutable) :
gcc codeSource.c -o nom_de_l_executable
Ensuite, déplacez l'exécutable dans votre répertoire cgi-bin/.
•
Pour tester les scripts il vous suffit de vous rendre à l'adresse :
http://prenom.nom.etu.perso.luminy.univ-amu.fr/cgi-bin/
suivie du nom du script (ou de l'exécutable).
Vous venez donc de voir comment un script (ou un programme C) peut afficher dans un navigateur Web :
•
il suffit que la première ligne qu'il écrit sur sa sortie soit "Content-type:
text/html"
•
et la seconde une ligne vide.
•
Ensuite il lui suffit d'écrire du HTML et uniquement du HTML. Dans la suite, on veillera à
produire du XHTML 1.0 Strict, et on devra faire référence à une feuille de style CSS.
II – Mon premier formulaire HTML
Pour transmettre des données à un script CGI, on se sert de formulaires HTML. Maintenant que l'on a vu comment un programme python va communiquer (écrire) vers le navigateur, il nous reste à savoir comment lui passer des arguments (comment notre script peut lire des données).
1. Copiez le fichier form.html dans votre répertoire public_html/, et allez à l'adresse http://prenom.nom.etu.perso.luminy.univ-amu.fr/form.html. Ouvrez le fichier dans un éditeur de texte et regardez le code source. Faites en sorte que quand on appuie sur le bouton il exécute votre script python3.py.
Testez. Si ça fonctionne, continuez.
2. Maintenant il serait bien que votre script CGI utilise le texte que vous tapez dans la zone de texte du formulaire. En python existe le module cgi (vous irez voir dans la documentation ce qu'il y a dedans).
Rajoutez dans votre code python (à l'endroit qui vous paraît le plus approprié) les lignes suivantes :
import cgi
form = cgi.FieldStorage() Récupère le dictionnaire stockant les valeurs associées à chaque élément du formulaire.
if "visiteur" in form:
text = form["visiteur"].value
else:
text = "Vous avez oublié d'indiquer votre nom !"
et faites en sorte que le script affiche « coucou nom » si le nom a été renseigné, sinon « coucou l'inconnu ! ».
Notes :
•
La clé "visiteur" correspond à l'entrée du formulaire d'attribut name="visiteur".
•
form["visiteur"].value correspond donc au texte que vous avez tapé dans la zone de saisie.
3. Une fois que votre formulaire et votre script fonctionnent, remplacez dans le formulaire la méthode POST (method="post") par GET (method="get"). Lorsque vous cliquez sur submit, constatez que les arguments sont visible dans l'adresse du script.
GET et POST sont deux méthodes différentes pour appeler un script CGI et lui passer des arguments.
III – Trucs utiles - Documentation
1. Créez un script contenant simplement l'appel de la fonction cgi.test(). Que fait cette fonction ? 2. Faites en sorte qu'un de vos formulaires (recopiez form.html) exécute ce nouveau script via la méthode GET quand on clique sur le bouton submit. Dans quelle variable se trouve les arguments passés au script ? Et avec la méthode POST ?
3. Dans un de vos scripts CGI, comme premières instructions, importez le module cgitb, puis appelez la fonction enable() de ce module. A quoi sert ce module ? Cette fonction ? (cherchez sur internet). Pour tester, mettez une erreur de syntaxe dans le scripts CGI et exécutez­le. Quel est le message d'erreur ?
IV – Formulaires avancés
1. Téléchargez les formulaires et les scripts CGI qui leur correspondent. Jouez avec.
2. Modifiez les formulaires text.html et textarea.html pour y insérer un champ de type hidden. (voir Documentation sur le Web). Un champ hidden permet de passer un argument au script, ce qui lui permettra de savoir quelle page web (quel formulaire) l'a appelé et de modifier son comportement en conséquence. Ce champ sera utilisé dans textEtTextarea.py pour faire en sorte d'afficher « Prénom » ou « Commentaire » au lieu de « Votre texte ».
3. Récupérez
multiplication.html et
multiplication.c. Compilez multiplication.c, installez l'exécutable dans cgi-bin/ et testez le formulaire.
4. Étudiez à fond le fonctionnement des scripts upload.py et uploadCreate.py. Vous en aurez besoin pour le devoir maison.
V - Devoir maison
1. Transformez votre projet PS1 en application Web CGI/Python3.
2. Il devrait cette fois­ci ressembler au maximum à l'application en ligne.
3. Faites en sorte qu'un maximum d'options fonctionnent, avec bien entendu des valeurs par défaut.