用Ruby进行CGI编程的入门指引

2019-09-25 09:42:49王冬梅

编写CGI脚本:

最基本的Ruby CGI脚本看起来像这样:

#!/usr/bin/ruby

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

如果调用这个脚本 test.cgi 上传到基于Unix/Linux的Web托管服务提供商并具有合适的权限,那么可以将它作为一个CGI脚本使用。

例如,如果有一个Linux的Web托管服务提供商托管的网站,如:http://www.yiibai.com/test.cgi 的主目录,并给它执行权限,那么访问 http://www.yiibai.com/test.cgi 应该返回一个HTML页面显示:This is a test.

这里时当 test.cgi 从Web浏览器请求,Web服务器看执行使用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查询参数有两种方法。假设我们给出 /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali.

可以访问参数FirstName和LastName使用CGI#[]如下:

#!/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" and "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>