Ruby-CGI-Programmierung
Ruby ist eine Allzwecksprache, nicht nur eine Sprache für die WEB-Entwicklung, aber Ruby wird am häufigsten bei der Entwicklung von WEB-Anwendungen und WEB-Tools eingesetzt.
Mit Ruby können Sie nicht nur Ihren eigenen SMTP-Server, FTP-Programm oder Ruby-Webserver schreiben, sondern Ruby auch für die CGI-Programmierung verwenden.
Als Nächstes nehmen wir uns etwas Zeit, um Ruby-CGI-Programmierung zu lernen.
Web-Browsing
Um besser zu verstehen, wie CGI funktioniert, können wir uns den Ablauf beim Klicken auf einen Link oder eine URL auf einer Webseite ansehen:
- 1. Verwenden Sie Ihren Browser, um auf die URL zuzugreifen und eine Verbindung zum HTTP-Webserver herzustellen.
- 2. Nachdem die Anfrage empfangen wurde, analysiert der Webserver die URL und prüft, ob die aufgerufene Datei auf dem Server existiert. Wenn sie existiert, gibt er den Dateiinhalt zurück; andernfalls gibt er eine Fehlermeldung zurück.
- 3. Der Browser empfängt die Informationen vom Server und zeigt die empfangene Datei oder Fehlermeldung an.
CGI-Programme können Ruby-Skripte, Python-Skripte, PERL-Skripte, SHELL-Skripte, C- oder C++-Programme usw. sein.
CGI-Architekturdiagramm

Webserver-Unterstützung und -Konfiguration
Bevor Sie mit der CGI-Programmierung beginnen, stellen Sie sicher, dass Ihr Webserver CGI unterstützt und dass der CGI-Handler konfiguriert wurde.
Apache-CGI-Konfiguration:
CGI-Verzeichnis einrichten:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Von allen HTTP-Servern ausgeführte CGI-Programme werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis wird als CGI-Verzeichnis bezeichnet und üblicherweise /var/www/cgi-bin genannt.
Die Dateiendung von CGI-Dateien ist .cgi, und Ruby kann auch die Dateiendung .rb verwenden.
Standardmäßig ist auf Linux-Servern das konfigurierte cgi-bin-Verzeichnis /var/www.
Wenn Sie ein anderes Verzeichnis für die Ausführung von CGI-Skripten angeben möchten, können Sie die Konfigurationsdatei httpd.conf wie folgt ändern:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>
Fügen Sie das Suffix .rb in AddHandler hinzu, damit wir auf Ruby-Skriptdateien zugreifen können, die auf .rb enden:
AddHandler cgi-script .cgi .pl .rb
CGI-Skripte schreiben
Der grundlegendste Ruby-CGI-Code sieht wie folgt aus:
#!/usr/bin/ruby puts "Content-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
Sie können diesen Code in die Datei test.cgi speichern, sie auf den Server hochladen und ausreichende Berechtigungen erteilen, und dann kann er als CGI-Skript ausgeführt werden.
Wenn Ihre Website-Adresse http://www.example.com/ lautet, können Sie über http://www.example.com/test.cgi auf das Programm zugreifen, und das Ausgabeergebnis ist: "This is a test."
Nachdem der Browser die URL aufgerufen hat, findet der Webserver die Datei test.cgi im Website-Verzeichnis und verwendet dann den Ruby-Parser, um den Skriptcode zu parsen und auf das HTML-Dokument zuzugreifen.
Verwenden von cgi.rb
Ruby kann die CGI-Bibliothek aufrufen, um komplexere CGI-Skripte zu schreiben.
Der folgende Code ruft die CGI-Bibliothek auf, um ein CGI-Skript zu erstellen.
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
Im folgenden Code wird ein CGI-Objekt erstellt und die Header-Informationen werden ausgegeben.
Formularverarbeitung
Mit der CGI-Bibliothek können Sie auf zwei Arten Daten abrufen, die von Formularen übermittelt wurden (oder Parameter in der URL), zum Beispiel URL: /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali.
Sie können CGI#[] verwenden, um die Parameter FirstName und LastName direkt abzurufen:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]
Eine andere Möglichkeit, Formulardaten abzurufen:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName'] # => ["Ali"]
Der folgende Code wird verwendet, um alle Schlüssel-Wert-Paare abzurufen:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]
Wenn das Formular mehrere Felder mit demselben Namen enthält, werden die Werte desselben Feldes in einem Array gespeichert.
Im folgenden Beispiel werden drei identische Felder "name" im Formular angegeben, mit den Werten "Zara", "Huma" und "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"]}
Hinweis:Ruby bestimmt die GET- und POST-Methoden automatisch, daher ist es nicht nötig, die beiden Methoden unterschiedlich zu behandeln.
Das Folgende ist der relevante HTML-Code:
<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>
Formular und HTML erstellen
CGI enthält eine große Anzahl von Methoden zum Erstellen von HTML, und jedes HTML-Tag hat eine entsprechende Methode. Bevor Sie diese Methoden verwenden, müssen Sie ein CGI-Objekt über CGI.new erstellen.
Um die Verschachtelung von Tags zu erleichtern, nehmen diese Methoden Inhalt als Codeblock, und der Codeblock gibt eine Zeichenkette als Inhalt des Tags zurück. Wie unten gezeigt:
#!/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
}
}
}
}
Zeichenketten-Escaping
Wenn Sie mit Parametern in URLs oder HTML-Formulardaten umgehen, müssen Sie bestimmte Sonderzeichen escapen, wie Anführungszeichen (") und Backslash (/).
Das Ruby-CGI-Objekt bietet die Methoden CGI.escape und CGI.unescape, um das Escaping dieser Sonderzeichen zu handhaben:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Das Ausführungsergebnis des obigen Codes ist wie folgt:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
Eine weitere Gruppe von Beispielen:
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
Das Ausführungsergebnis des obigen Codes ist wie folgt:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
Häufig verwendete Methoden in der CGI-Klasse
Das Folgende sind die zugehörigen Methoden der vollständigen CGI-Klasse in Ruby
- Ruby CGI- Standard-CGI-Bibliotheksmethoden
Cookies und Sitzungen
- Ruby CGI Cookies- Wie man CGI-Cookies behandelt.
- Ruby CGI-Sitzungen- Wie man CGI-Sitzungen behandelt.