Applications Web Ruby - Programmation CGI

Ruby est un langage à usage général; il ne peut pas du tout être qualifié de langage Web . Même ainsi, les applications Web et les outils Web en général font partie des utilisations les plus courantes de Ruby.

Non seulement vous pouvez écrire votre propre serveur SMTP, démon FTP ou serveur Web dans Ruby, mais vous pouvez également utiliser Ruby pour des tâches plus courantes telles que la programmation CGI ou en remplacement de PHP.

Veuillez passer quelques minutes avec le didacticiel de programmation CGI pour plus de détails sur la programmation CGI.

Écriture de scripts CGI

Le script Ruby CGI le plus basique ressemble à ceci -

#!/usr/bin/ruby

puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

Si vous appelez ce script test.cgi et que vous l' avez téléchargé sur un fournisseur d'hébergement Web basé sur Unix avec les autorisations appropriées , vous pouvez l'utiliser comme script CGI.

Par exemple, si vous avez le site Web https://www.example.com/hébergé chez un fournisseur d'hébergement Web Linux et vous téléchargez test.cgi dans le répertoire principal et lui donnez des autorisations d'exécution, puis visitezhttps://www.example.com/test.cgi devrait renvoyer une page HTML disant This is a test.

Ici, lorsque test.cgi est demandé à un navigateur Web, le serveur Web recherche test.cgi sur le site Web, puis l'exécute à l'aide de l'interpréteur Ruby. Le script Ruby renvoie un en-tête HTTP de base, puis un document HTML de base.

Utilisation de cgi.rb

Ruby est livré avec une bibliothèque spéciale appelée cgi qui permet des interactions plus sophistiquées que celles avec le script CGI précédent.

Créons un script CGI de base qui utilise cgi -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

puts cgi.header
puts "<html><body>This is a test</body></html>"

Ici, vous avez créé un objet CGI et l'avez utilisé pour imprimer la ligne d'en-tête pour vous.

Traitement des formulaires

L'utilisation de la classe CGI vous donne accès aux paramètres de requête HTML de deux manières. Supposons que l'on nous donne une URL de /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.

Vous pouvez accéder aux paramètres FirstName et LastName en utilisant CGI # [] directement comme suit -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # =>  ["Zara"]
cgi['LastName']  # =>  ["Ali"]

Il existe un autre moyen d'accéder à ces variables de formulaire. Ce code vous donnera un hachage de toutes les clés et valeurs -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
h = cgi.params  # =>  {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName']  # =>  ["Zara"]
h['LastName']   # =>  ["Ali"]

Voici le code pour récupérer toutes les clés -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

Si un formulaire contient plusieurs champs portant le même nom, les valeurs correspondantes seront renvoyées au script sous forme de tableau. L'accesseur [] renvoie juste le premier de ces derniers. Index le résultat de la méthode params pour les obtenir tous.

Dans cet exemple, supposons que le formulaire comporte trois champs appelés «nom» et que nous avons entré trois noms «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"]}

Note- Ruby s'occupera automatiquement des méthodes GET et POST. Il n'y a pas de traitement séparé pour ces deux méthodes différentes.

Un formulaire associé, mais basique, qui pourrait envoyer les données correctes aurait le code HTML comme ceci -

<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 utilisées pour créer du HTML. Vous trouverez une méthode par tag. Pour activer ces méthodes, vous devez créer un objet CGI en appelant CGI.new.

Pour faciliter l'imbrication des balises, ces méthodes prennent leur contenu sous forme de blocs de code. Les blocs de code doivent renvoyer une chaîne , qui sera utilisée comme contenu pour la balise. Par exemple -

#!/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
         }
      }
   }
}

NOTE- La méthode formulaire de la classe CGI peut accepter un paramètre de méthode, qui définira la méthode HTTP (GET, POST, et ainsi de suite ...) à utiliser lors de la soumission du formulaire. La valeur par défaut, utilisée dans cet exemple, est POST.

Cela produira le résultat suivant -

Content-Type: text/html
Content-Length: 302

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

<HTML>
   <HEAD>
      <TITLE>This Is a Test</TITLE>
   </HEAD>
   <BODY>
      <FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
         <HR>
         <H1>A Form: </H1>
         <TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
         <BR>
         <INPUT TYPE = "submit">
      </FORM>
   </BODY>
</HTML>

Citations de chaînes

Lorsque vous traitez avec des URL et du code HTML, vous devez faire attention à citer certains caractères. Par exemple, un caractère barre oblique (/) a une signification particulière dans une URL, il doit donc êtreescaped s'il ne fait pas partie du chemin.

Par exemple, tout / dans la partie requête de l'URL sera traduit en chaîne% 2F et doit être retransformé en / pour que vous puissiez l'utiliser. L'espace et l'esperluette sont également des caractères spéciaux. Pour gérer cela, CGI fournit les routinesCGI.escape et CGI.unescape.

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

Cela produira le résultat suivant -

Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby

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

Cela produira le résultat suivant -

&lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'

Méthodes utiles dans la classe CGI

Voici la liste des méthodes liées à la classe CGI -

  • Le Ruby CGI - Méthodes liées à la bibliothèque CGI standard.

Cookies et sessions

Nous avons expliqué ces deux concepts dans différentes sections. Veuillez suivre les sections -

Serveurs d'hébergement Web

Vous pouvez consulter la rubrique suivante sur Internet pour héberger votre site Web sur un serveur Unix -