English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby ist eine allgemeine Sprache und nicht nur eine Sprache, die auf Webentwicklung angewendet wird, aber die Entwicklung in Webanwendungen und Webwerkzeugen ist die häufigste Anwendung von Ruby.
Mit Ruby können Sie nicht nur Ihren eigenen SMTP-Server, FTP-Programm oder Ruby Webserver schreiben, sondern Sie können auch CGI-Programmierung mit Ruby durchführen.
Lassen Sie uns nun ein wenig Zeit nehmen, um die CGI-Editierung in Ruby zu lernen.
Um besser zu verstehen, wie CGI funktioniert, können wir den Prozess verfolgen, indem wir auf einen Link oder eine URL auf der Webseite klicken:
1、den URL mit Ihrem Browser aufrufen und eine Verbindung zum HTTP-Webserver herstellen.
2、der Webserver die Anfrageinformationen nach dem Empfang analysiert den URL und überprüft, ob die angeforderte Datei auf dem Server existiert, und gibt bei Vorhandensein den Inhalt der Datei zurück, andernfalls eine Fehlermeldung zurück.
3、der Browser Informationen vom Server empfängt und die empfangenen Dateien oder Fehlermeldungen anzeigt.
CGI-Programme können Ruby-Skripte, Python-Skripte, PERL-Skripte, SHELL-Skripte, C oder C sein++ Programme usw.
Stellen Sie sicher, dass Ihr Webserver CGI unterstützt und bereits den CGI-Handler konfiguriert hat, bevor Sie mit der CGI-Programmierung beginnen.
Apache unterstützt CGI-Konfigurationen:
Richten Sie das CGI-Verzeichnis ein:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Alle von HTTP-Serveren ausgeführten CGI-Programme werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis wird als CGI-Verzeichnis bezeichnet und gemäß Konvention wird es so genannt:/var/www/cgi-bin-Verzeichnis.
Die Erweiterung der CGI-Dateien ist .cgi, Ruby kann auch die Erweiterung .rb verwenden.
Standardmäßig werden auf einem Linux-Server konfigurierte cgi ausgeführt-Der bin-Verzeichnisinhalt ist/var/www。
Wenn Sie andere Verzeichnisse angeben möchten, in denen CGI-Skripte ausgeführt werden sollen, können Sie die httpd.conf-Konfigurationsdatei wie folgt ändern:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from allFügen Sie im AddHandler den Suffix .rb hinzu, damit wir auf Ruby-Skriptdateien mit .rb-Endung zugreifen können:
AddHandler cgi-script.cgi .pl .rbCGI-Skript schreiben
Die grundlegendsten Ruby CGI-Code sind wie folgt gezeigt:
#!/usr/bin/ruby puts "Content"-type: text/html\n\n" puts "<html><body>This is a test</body></html>"你可以将该代码保持到 test.cgi 文件中,上次到服务器并赋予足够权限,即可作为 CGI 脚本执行。
如果你站的的地址为http://www.example.com/ ,即可用过http://www.example.com/test.cgi 访问该程序,输出结果为: "This is a test."。
浏览器访问该网址后,Web 服务器会在站点目录下找到 test.cgi文件,然后通过Ruby解析器来解析脚本代码并访问HTML文档。
使用 cgi.rb
Ruby 可以调用 CGI 库来编写更复杂的CGI脚本。
以下代码调用了 CGI 库来创建一个脚本的CGI脚本。
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"以下代码中,创建了CGI 对象并打印头部信息。
表单处理
使用CGI库可以通过两种方式获取表单提交(或URL中的参数)的数据, 例如URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。
你可以使用 CGI#[] 来直接获取参数FirstName和LastName:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]另外一种获取表单数据的方法:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]} h['FirstName'] # => ["Zara"] h['LastName'] # => ["Ali"]以下代码用于检索所有的键值:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]如果表单包含了多个相同名称的字段,则该相同字段的值将保存在数组中。
以下示例中,指定表单中三个相同的字段"name",值分别为 "Zara", "Huma" 和 "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"]}注意:Ruby 会自动判断 GET 和 POST 方法,所以无需对两种方法区别对待。
以下是相关的HML代码:
CGI 包含了大量的方法来创建 HTML,每个HTML标签都有相对应的方法。 在使用这些方法前,比必须通过 CGI.new 来创建 CGI 对象。
为了使标签的嵌套更加的简单,这些方法将内容作为了代码块,代码块将返回字符串作为标签的内容。如下所示:
#!/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 } } } }
当你在处理 URL 中的参数或者 HTML 表单数据时,需要对指定的特殊字符进行转义,如:引号("),反斜杠(/)。
Ruby CGI 对象提供了CGI.escape 和 CGI.unescape 方法来处理这些特殊字符的转义:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
The execution result of the above code is as follows:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
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>'
The following are the complete methods related to the CGI class in Ruby
Ruby CGI - Standard CGI Library Related Methods
Ruby CGI Cookies - How to handle CGI Cookies.
Ruby CGI Sessions - How to handle CGI sessions.