发布于 2015-07-11 02:45:52 | 286 次阅读 | 评论: 0 | 来源: 网络整理
Ruby是一种通用的语言,它不能适当地被称为Web语言。即便如此,Web应用和Web工具一般是Ruby的中最常见的用途。
Ruby不仅可以写SMTP服务器,FTP守护进程或Ruby Web服务器,但也可以使用Ruby开发CGI程序或作为替代PHP更常见的任务。
请花几分钟CGI编程教程及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.phperz.com/test.cgi 的主目录,并给它执行权限,那么访问 http://www.phperz.com/test.cgi 应该返回一个HTML页面显示:This is a test.
这里时当 test.cgi 从Web浏览器请求,Web服务器看执行使用Ruby解释器它。 Ruby脚本返回一个基本的HTTP头,然后返回一个基本的HTML文档。
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>
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类的方法可以接受的方法参数,这将设置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类的所有方法的完整列表:
Ruby CGI - 方法相关标准CGI库。
已经解释这两个概念,在不同的环节。请按照这些链接:
Ruby CGI Cookies - 怎样处理 CGI Cookies.
Ruby CGI Sessions - 怎样管理 CGI sessions.