📜  Ruby Web应用程序-CGI编程

📅  最后修改于: 2020-10-16 06:01:33             🧑  作者: Mango


Ruby是一种通用语言。它根本不能正确地称为网络语言。即使这样,Web应用程序和Web工具通常还是Ruby的最常见用法。

您不仅可以用Ruby编写自己的SMTP服务器,FTP守护程序或Web服务器,而且还可以将Ruby用于更常见的任务,例如CGI编程或替代PHP。

请花几分钟阅读“ CGI编程指南”,以获取有关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并将其上载到具有适当权限的基于Unix的Web托管提供程序,则可以将其用作CGI脚本。

例如,如果您的网站https://www.example.com/由Linux Web托管提供程序托管,并且您将test.cgi上载到主目录并赋予其执行权限,则访问https:// www。 example.com/test.cgi应该返回一个HTML页面,说明这是一个测试

在这里,当从Web浏览器请求test.cgi时,Web服务器将在网站上查找test.cgi ,然后使用Ruby解释器执行它。 Ruby脚本返回一个基本的HTTP标头,然后返回一个基本的HTML文档。

使用cgi.rb

Ruby带有一个名为cgi的特殊库,与以前的CGI脚本相比,该库支持更复杂的交互。

让我们创建一个使用cgi的基本CGI脚本-

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

puts cgi.header
puts "This is a test"

在这里,您创建了一个CGI对象,并用它来为您打印标题行。

表格处理

使用类CGI可以通过两种方式访问HTML查询参数。假设给我们一个URL /cgi-bin/test.cgi?FirstName = Zara&LastName = Ali。

您可以使用CGI#[]直接访问参数FirstNameLastName ,如下所示:

#!/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"]

如果表单包含多个具有相同名称的字段,则相应的值将作为数组返回到脚本。 []访问器仅返回这些方法中的第一个。将params方法的结果返回索引以全部获取它们。

在此示例中,假设表单具有三个名为“名称”的字段,并且我们输入了三个名称“ 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方法。这两种不同的方法没有单独的处理方法。

可以发送正确数据的关联但基本的表单将具有如下的HTML代码-

First Name :
Last Name :

创建表单和HTML

CGI包含大量用于创建HTML的方法。您将为每个标签找到一种方法。为了启用这些方法,必须通过调用CGI.new创建一个CGI对象。

为了使标记嵌套更容易,这些方法将其内容作为代码块。代码块应返回String ,它将用作标签的内容。例如-

#!/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
         }
      }
   }
}

– CGI类的form方法可以接受method参数,该参数将设置要在表单提交中使用的HTTP方法(GET,POST等)。在此示例中使用的默认值为POST。

这将产生以下结果-

Content-Type: text/html
Content-Length: 302




   
      This Is a Test
   
   
      

A Form:


引用字符串

当URL和HTML代码打交道,你必须小心地引用某些字符。例如,字符(/)在一个URL特殊的意义,所以它必须,如果它不是路径的一部分进行转义

例如,URL查询部分中的任何/都将转换为字符串%2F,并且必须转换回为/才能使用。空格和&符也是特殊字符。为了解决这个问题,CGI提供了例程CGI.escapeCGI.unescape

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

这将产生以下结果-

Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby

require 'cgi'
puts CGI.escapeHTML('

Zara Ali/A Sweet & Sour Girl

')

这将产生以下结果-

Zara Ali/A Sweet & Sour Girl

'

CGI类中的有用方法

这是与CGI类相关的方法的列表-

Cookies和会议

我们已经在不同的部分解释了这两个概念。请遵循以下部分-

虚拟主机服务器

您可以在互联网上检查以下主题,以将您的网站托管在基于Unix的服务器上-