简单介绍Ruby中的CGI编程


Posted in Python onApril 10, 2015

Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的。

使用Ruby您不仅可以编写自己的SMTP服务器,FTP程序,或Ruby Web服务器,而且还可以使用Ruby进行CGI编程。

接下来,让我们花点时间来学校Ruby的CGI编辑。
编写 CGI 脚本

最脚本的 Ruby CGI 代码如下所示:

#!/usr/bin/ruby puts "HTTP/1.0 200 OK" puts "Content-type: text/html\n\n" puts "This is a test"

你可以将该代码保持到 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代码:

<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>

创建 Form 表单和 HTML

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")

以上代码执行结果如下:

#!/usr/bin/ruby
 
require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & 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>'
Python 相关文章推荐
一个简单的python程序实例(通讯录)
Nov 29 Python
python利用beautifulSoup实现爬虫
Sep 29 Python
python中引用与复制用法实例分析
Jun 04 Python
python实现微信远程控制电脑
Feb 22 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
Python双向循环链表实现方法分析
Jul 30 Python
Python 忽略warning的输出方法
Oct 18 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
python类中super() 的使用解析
Dec 19 Python
python微信公众号开发简单流程实现
Mar 09 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
python图片合成的示例
Nov 09 Python
详细介绍Ruby中的正则表达式
Apr 10 #Python
对于Python的Django框架部署的一些建议
Apr 09 #Python
Python线程中对join方法的运用的教程
Apr 09 #Python
在Python的Flask框架下使用sqlalchemy库的简单教程
Apr 09 #Python
详解Python中的正则表达式的用法
Apr 09 #Python
Python中几种操作字符串的方法的介绍
Apr 09 #Python
详解Python中的__new__()方法的使用
Apr 09 #Python
You might like
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
php jsonp单引号转义
2014/11/23 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
jsPDF导出pdf示例
2014/05/02 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python服务器端收发请求的实现代码
2014/09/29 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
通过python检测字符串的字母
2020/02/18 Python
python如何保存文本文件
2020/06/07 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
函授本科毕业生自我鉴定
2013/10/16 职场文书
升职自荐信
2013/11/28 职场文书
办公室前台岗位职责范本
2013/12/10 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
高中军训感言200字
2014/02/23 职场文书
公司营业员的自我评价
2014/03/04 职场文书
股东协议书
2014/04/14 职场文书
优秀员工演讲稿
2014/05/19 职场文书
节能环保标语
2014/06/12 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
英语感谢信范文
2015/01/20 职场文书
常住证明范本
2015/06/23 职场文书
健康教育主题班会
2015/08/14 职场文书
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS