简单介绍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 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python批量重命名同一文件夹下文件的方法
May 25 Python
浅析Python基础-流程控制
Mar 18 Python
Python实现二维有序数组查找的方法
Apr 27 Python
python框架django基础指南
Sep 08 Python
python安装教程 Pycharm安装详细教程
May 02 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
详解Python是如何实现issubclass的
Jul 24 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
python 统计代码耗时的几种方法分享
Apr 02 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中设置多级目录session的问题
2011/08/08 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
关于Python面向对象编程的知识点总结
2017/02/14 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Django实现学员管理系统
2019/02/26 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
策划创业计划书
2014/02/06 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
党员干部承诺书
2014/03/25 职场文书
建筑投标担保书
2014/05/20 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
应聘教师自荐信
2015/03/26 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
加薪申请报告范本
2015/05/15 职场文书
离婚纠纷代理词
2015/05/23 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
python实现自动化群控的步骤
2021/04/11 Python
python3中apply函数和lambda函数的使用详解
2022/02/28 Python