Il est né ?
Vous êtes ici : mk0phpgtk.xgarreau.org >> zazouminiwebserver : ZazouMiniWebServer: Handlers (asp, tcl, perl, ruby, python, ...)

Handlers

Qu'est ce qu'on appelle ici un handler ? Pour moi, un handler, c'est comme php. ZazouMiniWebServer est configuré par défaut pour confier à l'exécutable php, les fichiers .php. Définir un handler supplémentaire est possible dans ZazouMiniWebServer à partir de la version 0.7.5.

A quoi ça sert ? Imaginons que vous soyez un programmeur tcl (ou ruby ou python, peu importe). Vous souhaiteriez écrire des applications dans votre langage préféré et que leur résultat soit transmis via le web. Il vous suffit d'enregistrer vos scripts avec l'extension .tcl et de spécifier à ZazouMiniWebServer de faire interpréter ces scripts par tcl au lieu de les transmettre directement au client. Ceci peut également vous permettre d'écrire votre propre handler ou interpréteur de fichier pour des applications personnalisées et de le faire exécuter sur des données d'entrée fournies par les clients de votre serveur. Naturellement, ces handlers ont accès à toutes les variables définies dans la norme CGI/1.1.

Pour définir un nouvel handler, vous devez créer, s'il n'existe pas, un fichier _config.zmwsc dans le même répertoire que ZazouMiniWebServer.exe et y placer une ligne par extension selon le modèle suivant:

Handler:extension=chemin\vers\handler

Consultez la page fichier de configuration pour un exemple de syntaxe.

Utilisation avec ZazouTcl

ZazouTcl est une distribution tcl pour windows fournie sur ce même site. Pour l'utiliser pour faire interpréter vos scripts, le plus simple est de télécharger et décompresser le paquet dans le même répertoire que ZazouMiniWebServer.exe. Ceci vous donne un répertoire ZazouTcl.

Placez la ligne suivante dans votre fichier _config.zmwsc:

Handler:tcl="ZazouTcl\bin\tclsh.exe"

Placez ensuite dans le répertoire _web.zmwsc un script coucou.tcl contenant ceci:

puts "Content-Type: text/plain\n"
puts "Coucou"

La première ligne envoie les en-têtes (puts ajoute automatiquement un retour à la ligne, on en ajoute un second pour signaler au client que les headers sont finis et qu'on passe au contenu) et la seconde écrit un texte.

Redémarrez le serveur et connectez vous à http://localhost/coucou.tcl et vous devriez normalement avoir une page blanche avec juste Coucou ! Le reste, plus utile, c'est à vous de l'inventer.

Je remercie David Zolli, mainteneur du wiki tcl français pour m'avoir aidé pour cette partie tcl et pour m'avoir fait faire ZazouTcl.

Téléchargez ZazouTcl.

Utilisation avec Perl/Perl-ASP

Commencez par télécharger le dernier package Perl-5.8-win32 ici : http://archive.apache.org/dist/perl/win32-bin/. A l'heure de l'écriture de ces lignes, la dernière version est la 0.8. Installez-le dans le même répertoire que ZazouMiniWebServer.exe (Quelque chose comme E:\Travaux web\ZMWS selon votre configuration). Vous pouvez sauter la partie configuration, il est possible d'y revenir ensuite ... Pour ce qui nous préoccuppe, vous pouvez supprimer le dossier Apache2 et ne garder que le dossier Perl.

Support ASP Perl

Placez la ligne suivante dans votre fichier _config.zmwsc:

Handler:asp="Perl\bin\perl.exe Perl\bin\asp-perl"

Placez ensuite dans le répertoire _web.zmwsc un script coucou.asp contenant ceci:


<% print "Coucou" %>

Redémarrez le serveur et connectez vous à http://localhost/coucou.asp et vous devriez normalement avoir une page blanche avec juste Coucou ! Le reste, plus utile, c'est à vous de l'inventer.

Remarquez que le moteur asp (comme php) génère tout seul les en-têtes nécessaires comme Content-Type: text/html

Support Perl

Placez la ligne suivante dans votre fichier _config.zmwsc:

Handler:pl="Perl\bin\perl.exe"

Placez ensuite dans le répertoire _web.zmwsc un script coucou.pl contenant ceci:

print "Content-Type: text/plain\n\n";
print "Coucou";

Redémarrez le serveur et connectez vous à http://localhost/coucou.pl et vous devriez normalement avoir une page blanche avec juste Coucou ! Le reste, plus utile, c'est à vous de l'inventer.

Utilisation avec Rebol/Magic!

Cette démarche a été testée avec Rebol/Core 2.5.6 et Magic! 3.0.

Téléchargez Rebol/Core sur http://www.rebol.com/platforms.html, créez un sous-répertoire rebol dans celui contenant ZazouMiniWebServer.exe. Décompressez y le paquet contenant rebol.

Téléchargez la dernière version de magic (http://www.rebolfrance.org/), décompressez le dans un répertoire temporaire et placez magicxxx.cgi dans le répertoire ZMWS/rebol. Vous pouvez supprimer la première ligne du script, le shebang, qui commence par #!

Editer le fichier ZMWS/_config.zmwsc et y ajouter les lignes suivantes:

Handler:sr="Rebol\rebol031.exe -c"                             # For use with Rebol (more secure)
Handler:r="Rebol\rebol031.exe -cs"                             # For use with Rebol
Handler:rhtml="Rebol\rebol031.exe -cs Rebol\magic300.cgi"      # For use with Magic! (Rebol Server Pages)

Redémarrez le serveur (via start_all ou juste ZazouMiniWebServer.exe), la configuration est normalement OK !

Tester le support rebol

Créez un fichier dans ZMWS/_web.zmwsc, nommé coucou.r contenant (celui de la doc):

REBOL [Title: "CGI Script"]
print "content-type: text/html^/"
print [
	<HTML><BODY>
	"Now is:" now
	<PRE>
	mold system/options/cgi
	</PRE>
	</BODY></HTML>
]

Visitez http://localhost/coucou.r, logiquement on obtient quelque chose comme ça:

Now is: 4-Nov-2004/12:29:34+1:00

 
make object! [
    server-software: "ZazouMiniWebServer/0.8.1"
    server-name: "localhost"
    gateway-interface: "CGI/1.1"
    server-protocol: "HTTP/1.1"
    server-port: "80"
    request-method: "GET"
    path-info: none
    path-translated: "G:\tests\ZMWS/_web.zmwsc/coucou.r"
    script-name: "/coucou.r"
    query-string: none
    remote-host: "zaz1"
    remote-addr: "127.0.0.1"
    auth-type: none
    remote-user: none
    remote-ident: none
    Content-Type: none
    content-length: none
    other-headers: ["HTTP_ACCEPT" {text/xml,application/xml,application/xhtml+xml, ...
                    "HTTP_ACCEPT_CHARSET" "ISO-8859-15,utf-8;q=0.7,*;q=0.7"
                    "HTTP_ACCEPT_ENCODING" "gzip,deflate"
                    "HTTP_ACCEPT_LANGUAGE" "fr,en-us;q=0.7,en;q=0.3"
                    "HTTP_CONNECTION" "keep-alive"
                    "HTTP_HOST" "localhost"
                    "HTTP_KEEP_ALIVE" "300"
                    "HTTP_USER_AGENT" {Mozilla/5.0 (Windows; U; Windows NT 5.0; rv:1.7.3) Gecko/20040913 Firefox/0.10.1}]
] 

Tester le support Magic

Créez un fichier dans le répertoire _web.zmwsc, nommé magic.rhtml contenant (celui de la doc):

<html>
    <head><title>Sample1</title></head>
<body>
Bonjour, nous sommes le

<rebol>
	print [ now/date "<br><br>" ]
</rebol>

Il est actuellement :
<rebol>
	print [ "<b>" now/time "</b>" ]
</rebol>
</body>
</html>

Visitez http://localhost/magic.rhtml, logiquement on obtient qque chose comme ça:

Bonjour, nous sommes le 4-Nov-2004

Il est actuellement : 13:38:19

Utilisation avec .bat

Placez la ligne suivante dans votre fichier _config.zmwsc: (remplacez windows par winnt le cas échéant)

Handler:bat="c:\windows\system32\cmd.exe /C"

Placez ensuite dans le répertoire _web.zmwsc un script coucou.bat contenant ceci:

@echo off
echo Content-Type: text/plain
echo.
echo Coucou

Redémarrez le serveur et connectez vous à http://localhost/coucou.bat et vous devriez normalement avoir une page blanche avec juste Coucou ! Le reste, plus utile, c'est à vous de l'inventer.

Utilisation avec xxx

Trouver l'interpéteur xxx ou codez le vous même et renseignez en conséquence une ligne handler dans le fichier de configuration pour ce type.

On peut ainsi ajouter le support python, caml, haskell, eiffel, ... où des .exe tout bêtes. Mais attention ! Une extension déclarée comme devant être interprétée par un handler ou exécutée en local ne pourra pas être téléchargée telle quelle, de la même façon que vous ne pouvez pas télécharger directement des fichiers .php.

Sur ce amusez vous avec cette nouvelle fonctionnalité et tenez moi au courant !

a+

Auteur : Xavier GARREAU
Modifié le 03.11.2005

Rechercher :

Google
 
Web www.xgarreau.org