- Ruby 基础
- Ruby - 首页
- Ruby - 概述
- Ruby - 环境设置
- Ruby - 语法
- Ruby - 类和对象
- Ruby - 变量
- Ruby - 运算符
- Ruby - 注释
- Ruby - IF...ELSE
- Ruby - 循环
- Ruby - 方法
- Ruby - 代码块
- Ruby - 模块
- Ruby - 字符串
- Ruby - 数组
- Ruby - 哈希表
- Ruby - 日期和时间
- Ruby - 范围
- Ruby - 迭代器
- Ruby - 文件 I/O
- Ruby - 异常
Ruby Web 应用程序 - CGI 编程
Ruby 是一种通用语言;它根本不能被恰当地称为Web 语言。即便如此,Web 应用程序和一般的 Web 工具仍然是 Ruby 最常见的用途之一。
您不仅可以用 Ruby 编写自己的 SMTP 服务器、FTP 守护程序或 Web 服务器,还可以使用 Ruby 执行更常见的任务,例如 CGI 编程或替换 PHP。
请花几分钟时间阅读 CGI 编程 教程,以获取有关 CGI 编程的更多详细信息。
编写 CGI 脚本
最基本的 Ruby CGI 脚本如下所示:
#!/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>"
如果您将此脚本命名为test.cgi并将其上传到具有正确权限的基于 Unix 的 Web 托管提供商,则可以将其用作 CGI 脚本。
例如,如果您在 Linux Web 托管提供商处托管了网站 https://www.example.com/,并将test.cgi上传到主目录并赋予其执行权限,那么访问 https://www.example.com/test.cgi 应该会返回一个 HTML 页面,显示这是一个测试。
这里,当从 Web 浏览器请求test.cgi时,Web 服务器会在网站上查找test.cgi,然后使用 Ruby 解释器执行它。Ruby 脚本返回一个基本的 HTTP 标头,然后返回一个基本的 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 类,您可以通过两种方式访问 HTML 查询参数。假设我们给出了一个 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"]
如果表单包含多个具有相同名称的字段,则相应的将在脚本中作为数组返回。[] 访问器仅返回其中的第一个。索引 params 方法的结果以获取所有值。
在此示例中,假设表单有三个名为“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 方法。这两种不同方法没有单独的处理方式。
一个相关的基本表单,可以发送正确的数据,其 HTML 代码如下所示:
<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>
创建表单和 HTML
CGI 包含大量用于创建 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
}
}
}
}
注意 - CGI 类的form方法可以接受一个 method 参数,该参数将设置在表单提交时使用的 HTTP 方法(GET、POST 等)。在此示例中使用的默认方法是 POST。
这将产生以下结果:
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>
引用字符串
在处理 URL 和 HTML 代码时,必须小心地引用某些字符。例如,斜杠字符 (/) 在 URL 中具有特殊含义,因此如果它不是路径名的一部分,则必须对其进行转义。
例如,URL 查询部分中的任何 / 都将转换为字符串 %2F,并且必须将其转换回 / 才能使用它。空格和&也是特殊字符。为了处理这种情况,CGI 提供了CGI.escape和CGI.unescape例程。
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
这将产生以下结果:
Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
这将产生以下结果:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
CGI 类中的有用方法
以下是与 CGI 类相关的方法列表:
有关标准 CGI 库相关方法,请参阅 Ruby CGI 。
Cookie 和会话
我们在不同的章节中解释了这两个概念。请参阅以下章节:
有关如何处理 CGI Cookie,请参阅 Ruby CGI Cookie 。
有关如何管理 CGI 会话,请参阅 Ruby CGI 会话 。
Web 托管服务器
您可以在互联网上查看以下主题,以了解如何在基于 Unix 的服务器上托管您的网站: