简单介绍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的Bottle框架的一些使用技巧介绍
Apr 08 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
python使用fork实现守护进程的方法
Nov 16 Python
python实现读Excel写入.txt的方法
Apr 29 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Python3.7 新特性之dataclass装饰器
May 27 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 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实现的MySQL通用查询程序
2007/03/11 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
一些mootools的学习资源
2010/02/07 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
初识Node.js
2014/09/03 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
Python深入06——python的内存管理详解
2016/12/07 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python命令行工具Click快速掌握
2019/07/04 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
企业安全生产责任书范本
2014/07/28 职场文书
暑假学习心得体会
2014/09/02 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
详解Vue slot插槽
2021/11/20 Vue.js