Programmation Ruby CGI
Ruby est un langage universel, pas seulement un langage utilisé pour le développement WEB, mais Ruby est le plus courant dans le développement d'applications WEB et d'outils WEB.
En utilisant Ruby, vous pouvez non seulement écrire votre propre serveur SMTP, programme FTP ou serveur Web Ruby, mais vous pouvez également utiliser Ruby pour la programmation CGI.
Ensuite, prenons le temps d'apprendre l'édition CGI de Ruby.
Navigation Web
Afin de mieux comprendre le fonctionnement de CGI, nous pouvons commencer par le processus consistant à cliquer sur un lien ou une URL sur 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 les informations de la demande, le serveur Web analysera l'URL et vérifiera si le fichier consulté existe sur le serveur. Si le fichier existe, renverra le contenu du fichier. sinon un message d'erreur sera renvoyé.
3. Le navigateur reçoit des informations du serveur et affiche le fichier ou le message d'erreur reçu.
Le programme CGI peut être un script Ruby, un script Python, un script PERL, un script SHELL, un programme C ou C++, etc.
Schéma d'architecture CGI
Prise en charge et configuration du serveur Web
Avant de faire de la programmation CGI, assurez-vous de Le serveur Web prend en charge CGI et dispose de gestionnaires CGI configurés.
Apache prend en charge la configuration CGI :
Configurez le répertoire CGI :
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Tous les programmes CGI d'exécution du serveur HTTP sont enregistrés dans un répertoire préconfiguré. Ce répertoire est appelé répertoire CGI, et par convention, il est nommé /var/www/cgi-bin.
Les fichiers CGI ont une extension .cgi et Ruby peut également utiliser l'extension .rb.
Par défaut, le répertoire cgi-bin dans lequel le serveur Linux est configuré pour s'exécuter est /var/www.
Si vous souhaitez spécifier d'autres répertoires pour exécuter les 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 pour que nous puissions y accéder . Fichier de script Ruby se terminant par rb :
AddHandler cgi-script .cgi .pl .rb
Écriture de scripts CGI
Le code Ruby CGI le plus basique est le suivant :
#!/usr/bin/ruby puts "Content-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
Vous pouvez conserver ce code pour Dans le fichier test.cgi, vous pouvez l'exécuter en tant que script CGI après vous être connecté la dernière fois au serveur et avoir accordé les autorisations suffisantes.
Si l'adresse de votre site est http://www.example.com/, vous pouvez utiliser http://www.example.com/test.cgi pour accéder au programme. Le résultat de sortie est : "C'est un test."
Une fois que le navigateur a accédé à 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.
Utilisez 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 d'un script.
#!/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 du formulaire
En utilisant la bibliothèque CGI, vous pouvez obtenir les données de la soumission du formulaire (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 valeurs clés :
#!/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 des mêmes champs seront enregistrées dans le tableau.
Dans l'exemple suivant, trois champs "nom" identiques sont précisés dans le formulaire, et les valeurs sont "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éterminera automatiquement les méthodes GET et POST, il n'est donc pas nécessaire de traiter les deux méthodes différemment.
Ce qui suit est le code HML pertinent :
<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 formulaires et HTML
CGI contient un grand nombre de méthodes pour créer du HTML, chaque balise HTML a méthode correspondante. Avant d'utiliser ces méthodes, un objet CGI doit être créé via CGI.new.
Pour faciliter l'imbrication des balises, ces méthodes traitent le contenu comme un bloc de code, et le bloc de code renverra 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 } } } }
String Escape
Lorsque vous traitez des paramètres dans les données d'un formulaire URL ou HTML, vous devez échapper les caractères spéciaux spécifiés, tels que : Guillemets ( "), barre oblique inverse (/).
L'objet Ruby CGI 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 code ci-dessus est exécuté. Les résultats sont les suivants :
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Un autre ensemble d'instances :
#!/usr/bin/ruby require 'cgi' puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
Les résultats d'exécution de code ci-dessus sont les suivants :
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
Méthodes couramment utilisées dans les classes CGI
Voici les méthodes associées de la classe CGI complète dans Ruby
Ruby CGI - Méthodes liées à la bibliothèque CGI standard
Cookies et sessions
Cookies Ruby CGI - Comment gérer les cookies CGI.
Sessions Ruby CGI - Comment gérer les sessions CGI.