简单介绍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对数组进行反转的方法
May 20 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
Python socket实现的简单通信功能示例
Aug 21 Python
Python引用计数操作示例
Aug 23 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
django的model操作汇整详解
Jul 26 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
Python csv文件记录流程代码解析
Jul 16 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 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 实用代码收集
2010/01/22 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
php格式化时间戳
2016/12/17 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
JQuery常见节点操作实例分析
2019/05/15 jQuery
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
python计算两个数的百分比方法
2018/06/29 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
详解python中的线程与线程池
2019/05/10 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
当当网软件测试笔试题
2015/11/24 面试题
客户表扬信范文
2014/01/10 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
大学同学会活动方案
2014/08/20 职场文书
银行求职信范文
2019/05/13 职场文书
理解python中装饰器的作用
2021/07/21 Python
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL