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

cgiarch1.gif


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.