📅  最后修改于: 2020-10-16 06:01:33             🧑  作者: Mango
Ruby是一种通用语言。它根本不能正确地称为网络语言。即使这样,Web应用程序和Web工具通常还是Ruby的最常见用法。
您不仅可以用Ruby编写自己的SMTP服务器,FTP守护程序或Web服务器,而且还可以将Ruby用于更常见的任务,例如CGI编程或替代PHP。
请花几分钟阅读“ 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文档。
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#[]直接访问参数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"]
如果表单包含多个具有相同名称的字段,则相应的值将作为数组返回到脚本。 []访问器仅返回这些方法中的第一个。将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代码-
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
当URL和HTML代码打交道,你必须小心地引用某些字符。例如,字符(/)在一个URL特殊的意义,所以它必须,如果它不是路径的一部分进行转义。
例如,URL查询部分中的任何/都将转换为字符串%2F,并且必须转换回为/才能使用。空格和&符也是特殊字符。为了解决这个问题,CGI提供了例程CGI.escape和CGI.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类相关的方法的列表-
Ruby CGI-与标准CGI库相关的方法。
我们已经在不同的部分解释了这两个概念。请遵循以下部分-
Ruby CGI Cookies-如何处理CGI Cookies。
Ruby CGI会话-如何管理CGI会话。
您可以在互联网上检查以下主题,以将您的网站托管在基于Unix的服务器上-