简单介绍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字符串连接的N种方式总结
Sep 17 Python
Python函数嵌套实例
Sep 23 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
解决python 输出是省略号的问题
Apr 19 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
python实现动态数组的示例代码
Jul 15 Python
在Python中通过threshold创建mask方式
Feb 19 Python
Python类和实例的属性机制原理详解
Mar 21 Python
iPython pylab模式启动方式
Apr 24 Python
重写django的model下的objects模型管理器方式
May 15 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
jquery中ajax学习笔记4
2011/10/16 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
2017/03/13 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
如何用python整理附件
2018/05/13 Python
django允许外部访问的实例讲解
2018/05/14 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
python进行TCP端口扫描的实现
2018/12/21 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Python加速程序运行的方法
2020/07/29 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
资深生产主管自我评价
2013/09/22 职场文书
质检员岗位职责
2015/02/03 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js
MySQL创建管理KEY分区
2022/04/13 MySQL
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL