TCP/IP V3R20 - V3R70 reconnait la norme CGI Il s'agit de définir dans une page HTML : - des zones d'entrée - des objets graphiques : boutons radio/cases à cocher - deux boutons a/ submit (validation) b/ reset (remise à blanc) et d'associer un pgm de traitement sur le serveur. Principaux TAGs HTML : <FORM ACTION="/QSYS.LIB/WWWCGI.LIB/SIGNATURCL.PGM" METHOD=POST> Définit le programme à exécuter (syntaxe IFS) |
Il existe deux méthodes de transmission des données avec CGI : GET = les valeurs sont transmises dans une variable d'environnement QUERY_STRING POST = les valeurs sont transmises dans le flot de données en entrée (STDIN), une variable nommée CONTENT_LENGTH donne la longueur. Vous devez autoriser l'une de ces méthodes (ou les deux) dans la configuration HTTP (WRKHTTPCFG) par : enable GET ou enable POST |
Les variables d'enrivonnement peuvent être assignées par : ADDENVVAR ENVVAR(Essai) VALUE(valeur) les commandes CHGENVVAR et WRKENVVAR sont également disponibles. le serveur HTTP founit automatiquement certaines variables comme : REMOTE_ADDR : adresse IP REMOTE_HOST : nom de machine SERVER_NAME : nom du serveur QUERY_STRING: la série de paramètres si méthode = GET etc .. |
Suite du formulaire <INPUT NAME=NOM TYPE=TEXT SIZE=15 MAXLENGTH = 15> définition d'une zone de saisie, son nom, son type, sa taille maxi <INPUT TYPE=SUBMIT VALUE="VALIDATION"> <INPUT TYPE=RESET VALUE="effacer"> Définition des deux boutons de traitement avec leur texte . le programme SIGNATURCL va dons être appellé, et les paramètres transmis dans Le flot d'entrée (STDIN) sous la forme "chemin/nom-de-pgm?nom1=valeur1&nom2=valeur2" nom1, nom2 sont les noms tel qu'indiqués par INPUT NAME= les valeurs sont transmises à la longueur saisie et non à la longueur déclarée. la paramètre se termine par un zéro hexa, jusqu'en V4R20 . |
Votre programme doit recevoir le paramètre et générer un résultat soit sous la forme "location : http://<<--URL--->>" ce qui redirige vers un document déja écrit exemple location: http://129.1.1.1/html/cgi/erreur.html soit sous la forme "content-type : type-mime/sous-type" ce qui permet de renvoyer du texte HTML dynamique exemple Content-type: text/html <HTML> ....</HTML> |
APIs Liées : QtmhRdStin Lire STDIN (le flot en entré) + char(?) paramètre à lire + bin(4) lg de la variable + bin(4) lg de la valeur + char(?) structure std de gestion des erreurs QtmhWrStout écrire dans STDOUT (le flot en sortie) + char(?) paramètre à écrire + bin(4) lg de la variable + char(?) structure std de gestion des erreurs |
QtmhCvtDb découper un paramètre suivant un format BD + char(20) <--fichier(10c)-><--bib(10c)--> + char(?) paramètre lu (à découper) + bin(4) lg de la variable + char(?) data structure résultat + char(10) nom du format BD + bin(4) code retour 0 =OK, -1=Erreur de converison + char(?) structure std de gestion des erreurs ATTENTION les zones doivent avoir le même nom dans le formulaire et la DS. QtmhGetEnv lire le contenu d'une variable d'environnement + char(?) paramètre à lire + bin(4) lg de la variable + bin(4) lg de la valeur + Char(?) nom de la variable d'environnement + BIN(4) lg du nom + char(?) structure std de gestion des erreurs |
Vous devez donc : 1/ lire STDIN (utilisez la méthode POST) 2/ découper les données transmises a/ par pgm (en scannant '?', puis les caractères "&") b/ par API en créant un fichier PF qui servira de modèle 3/ gérer les données enregistrement ET/OU lecture base de données, ... 4/ fournir une réponse (STDOUT) a/ soit en indiquant les coordonnées d'un fichier HTML (données statiques) b/ soit en fournissant par pgm le flot HTML de réponse (données dynamiques) |
Pour plus d'information sur CGI sur AS/400, voyez la documentation SC41-3420-04 "TCP/IP Configuration and reference" , chapitre 13. sur la norme, voyez les sites WEB suivants : - http://hoohoo.ncsa.uiuc.edu/cgi/ et sur YAHOO la liste des sites parlant de CGI est : - http://www.yahoo.com/Computers/World_Wide_Web/... ...CGI__Common_Gateway_Interface/ (sur une seule ligne bien sur) ou bien, utilisez Net.Data. |