简单介绍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 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
Python网站验证码识别
Jan 25 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
PyQt5爬取12306车票信息程序的实现
May 14 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
综合图片计数器
2006/10/09 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
PHP精确计算功能示例
2016/11/29 PHP
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
JS重载实现方法分析
2016/12/16 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python下载网络小说实例代码
2018/02/03 Python
python logging.info在终端没输出的解决
2020/05/12 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
委托书范本
2014/04/02 职场文书
求职个人评价范文
2014/04/09 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
如何使用PyCharm及常用配置详解
2021/06/03 Python
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python