English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby CGI Programming

Ruby est un langage polyvalent, ce n'est pas seulement un langage appliqué au développement web, mais Ruby est le plus couramment utilisé 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 vous pouvez également utiliser Ruby pour programmer en CGI.

Ensuite, passons un peu de temps à apprendre la création de CGI en Ruby.

Navigation sur le web

Pour mieux comprendre comment fonctionne CGI, nous pouvons suivre le flux en cliquant 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、le serveur Web reçoit des informations de requête, analyse l'URL et vérifie si le fichier demandé 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 des informations du serveur et affiche le fichier reçu ou un message d'erreur.

Les programmes CGI peuvent être des scripts Ruby, des scripts Python, des scripts PERL, des scripts SHELL, du C ou du C++ programmes, etc.

Schéma d'architecture CGI

Support et configuration du serveur Web

Avant de commencer à programmer en CGI, assurez-vous que votre serveur Web prend en charge CGI et que le gestionnaire de CGI est configuré.

Apache prend en charge la configuration CGI :

Configurer le répertoire CGI :

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

Tous les serveurs HTTP exécutent des programmes CGI dans un répertoire préconfiguré. Ce répertoire est appelé répertoire CGI et, selon la convention, il est nommé/var/www/cgi-Répertoire bin.

Les fichiers CGI ont une extension .cgi, Ruby peut également utiliser l'extension .rb.

Par défaut, la configuration du serveur Linux exécute des cgi-Le répertoire bin contient/var/www。

Si vous souhaitez spécifier un autre répertoire pour l'exécution 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
body>/Directory>

Ajoutez l'extension .rb dans AddHandler, ainsi nous pourrons accéder aux fichiers de scripts Ruby se terminant par .rb :

AddHandler cgi-script.cgi .pl .rb

Écrire un script CGI

Le code Ruby CGI le plus basique est présenté comme suit :

#!/usr/bin/ruby
puts "Content"-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

Vous pouvez garder ce code dans le fichier test.cgi, le télécharger sur le serveur et attribuer les permissions suffisantes, puis il peut être exécuté en tant que script CGI.

Si l'adresse de votre site est http://<form method="POST" action="http:/ ,即可用过http://<form method="POST" action="http:/L'accès à ce programme par test.cgi, le résultat est : "This is a test."。

Après que le navigateur a visité cette adresse, le serveur Web trouvera le fichier test.cgi dans le répertoire du site et l'analysera avec l'interpréteur Ruby pour 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 de 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 affichées.

Traitement du formulaire

L'utilisation de la bibliothèque CGI permet de récupérer les données du formulaire soumis (ou les paramètres de l'URL) de deux manières : Par exemple, l'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"]

Il existe une autre méthode pour 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 rechercher tous les clés :

#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

Si le formulaire contient plusieurs champs du même nom, les valeurs de ce champ identique seront conservées dans un tableau.

Dans l'exemple suivant, trois champs identiques du formulaire "name" sont spécifiés, leurs valeurs respectives 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.keys           # => ["name"]

cgi.params         # => {"name"=>["Zara", "Huma", "Nuha"]}Attention :

Ruby juge automatiquement les méthodes GET et POST, donc il n'est pas nécessaire de traiter différemment les deux méthodes.

Voici le code HTML pertinent :
<html>
<body>//<form method="POST" action="http:/www.example.com
test.cgi"> /<input type="submit" value="Submit Data"
Nom de naissance :<input type="text" name="FirstName" value="" /<input type="submit" value="Submit Data"
<br /<input type="submit" value="Submit Data" 
Nom de famille :<input type="text" name="LastName" value="" /<input type="submit" value="Submit Data"
body>/>
body>/form>
body>/<

html>

Création de formulaires et de HTML Le paquet CGI contient de nombreuses méthodes pour créer du HTML, chaque balise HTML a une méthode correspondante.

Avant d'utiliser ces méthodes, il est nécessaire de créer un objet CGI à l'aide de CGI.new.

#!/usr/bin/ruby
Pour simplifier l'encastrement des balises, ces méthodes prennent le contenu en tant que blocs de code, et les blocs de code renvoient une chaîne en tant que contenu des balises. Voici un exemple :
require "cgi"4cgi = CGI.new("html"
})
   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
         }
      }
   }
}

Escaping de chaîne

Lorsque vous traitez les paramètres d'URL ou les données de formulaires HTML, vous devez escaping les caractères spéciaux indiqués, tels que : les guillemets ("), les barres obliques inversées (\)/)。

L'objet CGI en Ruby fournit les méthodes CGI.escape et CGI.unescape pour traiter ces caractères spéciaux :

#!/usr/bin/ruby
require 'cgi'
puts CGI.escape(Zara Ali/Une fille douce et piquante

The execution result of the above code is as follows:

#!/usr/bin/ruby
require 'cgi'
puts CGI.escape(Zara Ali/Une fille douce et piquante

Another set of examples:

#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

The execution result of the above code is as follows:

<h1>Zara Ali/A Sweet & Sour Girl</h1>'

Common Methods in CGI Class

The following are the complete methods related to the CGI class in Ruby

  • Ruby CGI  - Standard CGI Library Related Methods

Cookies and Sessions