Programmation CGI en Ruby
Ruby est un langage polyvalent, pas seulement un langage pour le développement WEB, mais Ruby est plus courant dans le développement d'applications WEB et d'outils WEB.
Avec Ruby, vous pouvez non seulement écrire votre propre serveur SMTP, programme FTP ou serveur Web Ruby, mais aussi utiliser Ruby pour la programmation CGI.
Ensuite, consacrons un peu de temps à apprendre la programmation CGI en Ruby.
Navigation Web
Pour mieux comprendre le fonctionnement de CGI, nous pouvons examiner le déroulement d'un clic sur un lien ou une URL dans une page web :
- 1. Utilisez votre navigateur pour accéder à l'URL et vous connecter au serveur web HTTP.
- 2. Après avoir reçu la requête, le serveur Web analyse l'URL et vérifie si le fichier accédé existe sur le serveur. S'il existe, il renvoie le contenu du fichier ; sinon, il renvoie un message d'erreur.
- 3. Le navigateur reçoit les informations du serveur et affiche le fichier reçu ou le message d'erreur.
Les programmes CGI peuvent être des scripts Ruby, des scripts Python, des scripts PERL, des scripts SHELL, des programmes C ou C++, etc.
Schéma de l'architecture CGI

Prise en charge et configuration du serveur web
Avant de commencer la programmation CGI, assurez-vous que votre serveur Web prend en charge CGI et que le gestionnaire CGI a été configuré.
Configuration CGI d'Apache :
Configurer le répertoire CGI:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Les programmes CGI exécutés par tous les serveurs HTTP sont stockés dans un répertoire préconfiguré. Ce répertoire est appelé répertoire CGI et, par convention, il est nommé répertoire /var/www/cgi-bin.
L'extension des fichiers CGI est .cgi, et Ruby peut également utiliser l'extension .rb.
Par défaut, sur les serveurs Linux, le répertoire cgi-bin configuré est /var/www.
Si vous souhaitez spécifier un autre répertoire pour exécuter des scripts CGI, vous pouvez modifier le fichier de configuration httpd.conf comme suit :
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>
Ajoutez le suffixe .rb dans AddHandler, afin que nous puissions accéder aux fichiers de script Ruby se terminant par .rb :
AddHandler cgi-script .cgi .pl .rb
Écriture de scripts CGI
Le code CGI Ruby le plus simple est le suivant :
#!/usr/bin/ruby puts "Content-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
Vous pouvez enregistrer ce code dans le fichier test.cgi, le téléverser sur le serveur et accorder des autorisations suffisantes, puis il peut être exécuté comme script CGI.
Si l'adresse de votre site est http://www.example.com/, vous pouvez accéder au programme via http://www.example.com/test.cgi, et le résultat de sortie est : "This is a test."
Après que le navigateur a visité l'URL, le serveur Web trouvera le fichier test.cgi dans le répertoire du site, puis utilisera l'analyseur Ruby pour analyser le code du script et accéder au document HTML.
Utilisation de cgi.rb
Ruby peut appeler la bibliothèque CGI pour écrire des scripts CGI plus complexes.
Le code suivant appelle la bibliothèque CGI pour créer un script CGI.
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
Dans le code suivant, un objet CGI est créé et les informations d'en-tête sont imprimées.
Traitement des formulaires
En utilisant la bibliothèque CGI, vous pouvez obtenir les données soumises par les formulaires (ou les paramètres dans l'URL) de deux manières, par exemple URL : /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali.
Vous pouvez utiliser CGI#[] pour obtenir directement les paramètres FirstName et LastName :
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]
Une autre façon d'obtenir les données du formulaire :
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName'] # => ["Ali"]
Le code suivant est utilisé pour récupérer toutes les paires clé-valeur :
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]
Si le formulaire contient plusieurs champs portant le même nom, les valeurs du même champ seront stockées dans un tableau.
Dans l'exemple suivant, trois champs identiques "name" sont spécifiés dans le formulaire, avec les valeurs "Zara", "Huma" et "Nuha" :
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi['name'] # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys # => ["name"]
cgi.params # => {"name"=>["Zara", "Huma", "Nuha"]}
Remarque :Ruby détermine automatiquement les méthodes GET et POST, il n'est donc pas nécessaire de traiter les deux méthodes différemment.
Voici le code HTML correspondant :
<html> <body> <form method="POST" action="http://www.example.com/test.cgi"> First Name :<input type="text" name="FirstName" value="" /> <br /> Last Name :<input type="text" name="LastName" value="" /> <input type="submit" value="Submit Data" /> </form> </body> </html>
Création de formulaire et HTML
CGI contient un grand nombre de méthodes pour créer du HTML, et chaque balise HTML a une méthode correspondante. Avant d'utiliser ces méthodes, vous devez créer un objet CGI via CGI.new.
Pour faciliter l'imbrication des balises, ces méthodes prennent le contenu sous forme de bloc de code, et le bloc de code renvoie une chaîne comme contenu de la balise. Comme indiqué ci-dessous :
#!/usr/bin/ruby
require "cgi"
cgi = CGI.new("html4")
cgi.out{
cgi.html{
cgi.head{ "\n"+cgi.title{"This Is a Test"} } +
cgi.body{ "\n"+
cgi.form{"\n"+
cgi.hr +
cgi.h1 { "A Form: " } + "\n"+
cgi.textarea("get_text") +"\n"+
cgi.br +
cgi.submit
}
}
}
}
Échappement des chaînes
Lorsque vous traitez des paramètres dans des URL ou des données de formulaire HTML, vous devez échapper certains caractères spéciaux, tels que les guillemets (") et la barre oblique inversée (/).
L'objet CGI de Ruby fournit les méthodes CGI.escape et CGI.unescape pour gérer l'échappement de ces caractères spéciaux :
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Le résultat d'exécution du code ci-dessus est le suivant :
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Un autre ensemble d'exemples :
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
Le résultat d'exécution du code ci-dessus est le suivant :
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
Méthodes couramment utilisées dans la classe CGI
Voici les méthodes associées de la classe CGI complète en Ruby
- Ruby CGI- Méthodes standard de la bibliothèque CGI
Cookies et sessions
- Cookies CGI Ruby- Comment gérer les cookies CGI.
- Sessions CGI Ruby- Comment gérer les sessions CGI.