Ruby是一种通用语言;它根本不能称为网络语言.即便如此,Web应用程序和Web工具通常也是Ruby的最常见用途.
您不仅可以在Ruby中编写自己的SMTP服务器,FTP守护程序或Web服务器,还可以你也可以使用Ruby来完成更常见的任务,比如CGI编程或替代PHP.
请花几分钟时间用 CGI编程教程,了解有关CGI编程的更多细节.
编写CGI脚本
最基本的Ruby CGI脚本如下所示;
#!/usr/bin/rubyputs "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&minus的基本CGI脚本;
#!/usr/bin/rubyrequire 'cgi'cgi = CGI.newputs cgi.headerputs "This is a test"
在这里,您创建了一个CGI对象并用它来打印标题行.
表单处理
使用类CGI可以通过两种方式访问HTML查询参数.假设我们的URL为/cgi-bin/test.cgi?FirstName = Zara& LastName = Ali.
您可以访问参数 FirstName 和 LastName 直接使用CGI#[]如下 :
#!/usr/bin/rubyrequire 'cgi'cgi = CGI.newcgi['FirstName'] # => ["Zara"]cgi['LastName'] # => ["Ali"]
还有另一种方法可以访问这些表单变量.此代码将为您提供所有键和值的哈希值 :
#!/usr/bin/rubyrequire 'cgi'cgi = CGI.newh = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}h['FirstName'] # => ["Zara"]h['LastName'] # => ["Ali"]
以下是检索所有键的代码 :
#!/usr/bin/rubyrequire 'cgi'cgi = CGI.newcgi.keys # => ["FirstName", "LastName"]
如果表单包含多个具有相同名称的字段,则相应的值将作为数组返回给脚本. []访问器只返回这些中的第一个.索引params方法的结果以获取它们.
在这个例子中,假设表单有三个名为"name"的字段,我们输入了三个名字"Zara","Huma"和"Nuha" :
#!/usr/bin/rubyrequire 'cgi'cgi = CGI.newcgi['name'] # => "Zara"cgi.params['name'] # => ["Zara", "Huma", "Nuha"]cgi.keys # => ["name"]cgi.params # => {"name"=>["Zara", "Huma", "Nuha"]}
注意 : Ruby将自动处理GET和POST方法.对于这两种不同的方法没有单独的处理方法.
可以发送正确数据的相关但基本的表单将具有类似于&minus的HTML代码;
创建表单和HTML
CGI包含大量用于创建HTML的方法.你会发现每个标签有一种方法.为了启用这些方法,您必须通过调用CGI.new来创建CGI对象.
为了使标记嵌套更容易,这些方法将其内容作为代码块.代码块应返回 String ,它将用作标记的内容.例如 :
#!/usr/bin/rubyrequire "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 方法可以接受方法参数,该方法参数将设置要在表单提交上使用的HTTP方法(GET,POST等).此示例中使用的默认值为POST.
这将产生以下结果 :
Content-Type: text/htmlContent-Length: 302This Is a Test
引用字符串
处理URL和HTML代码时,必须小心引用某些字符.例如,斜杠字符(/)在URL中具有特殊含义,因此如果它不是路径名的一部分,则必须转义.
例如, URL的查询部分中的任何/将被转换为字符串%2F,并且必须转换回/以供您使用.空格和符号也是特殊字符.为了解决这个问题,CGI提供了例程 CGI.escape 和 CGI.unescape .
#!/usr/bin/rubyrequire 'cgi'puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
这将产生以下结果 :
Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/rubyrequire 'cgi'puts CGI.escapeHTML('Zara Ali/A Sweet & Sour Girl
')
这将产生以下结果 :
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
CGI类中的有用方法
这是列表与CGI类相关的方法 :
Ruby CGI : 与标准CGI库相关的方法.
Cookie和会话
我们已经解释了这两个概念在不同的部分.请遵循以下部分 :
Ruby CGI Cookies : 如何处理CGI Cookies.
Ruby CGI会话 &减去;如何管理CGI会话.
虚拟主机服务器
您可以查看以下主题互联网在基于Unix的服务器上托管你的网站 :
基于Unix的虚拟主机