简单介绍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高手之路python处理excel文件(方法汇总)
Jan 07 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
python字典DICT类型合并详解
Aug 17 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
Django 跨域请求处理的示例代码
May 02 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
Python 数据可视化pyecharts的使用详解
Jun 26 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
使用python实现画AR模型时序图
Nov 20 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 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实现的简单美国商品税计算函数
2015/07/13 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
[JS]点出统计器
2020/10/11 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
JavaScript中this详解
2015/09/01 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
python实现kNN算法
2017/12/20 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
办公室秘书岗位职责范本
2014/02/11 职场文书
亲属关系公证书
2014/04/08 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书