簡單介紹Ruby中的CGI編程

來源:互聯網
上載者:User
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.newputs cgi.headerputs "This is a test"

以下代碼中,建立了CGI 對象並列印頭部資訊。
表單處理

使用CGI庫可以通過兩種方式擷取表單提交(或URL中的參數)的資料, 例如URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。

你可以使用 CGI#[] 來直接擷取參數FirstName和LastName:

#!/usr/bin/ruby require 'cgi'cgi = CGI.newcgi['FirstName'] # => ["Zara"]cgi['LastName'] # => ["Ali"]

另外一種擷取表單資料的方法:

#!/usr/bin/ruby require 'cgi'cgi = CGI.newh = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}h['FirstName'] # => ["Zara"]h['LastName']  # => ["Ali"]

以下代碼用於檢索所有的索引值:

#!/usr/bin/ruby require 'cgi'cgi = CGI.newcgi.keys     # => ["FirstName", "LastName"]

如果表單包含了多個相同名稱的欄位,則該相同欄位的值將儲存在數組中。

以下執行個體中,指定表單中三個相同的欄位"name",值分別為 "Zara", "Huma" 和 "Nuha":

#!/usr/bin/ruby require 'cgi'cgi = CGI.newcgi['name']    # => "Zara"cgi.params['name'] # => ["Zara", "Huma", "Nuha"]cgi.keys      # => ["name"]cgi.params     # => {"name"=>["Zara", "Huma", "Nuha"]}

注意:Ruby 會自動判斷 GET 和 POST 方法,所以無需對兩種方法區別對待。

以下是相關的HML代碼:


建立 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('

Zara Ali/A Sweet & Sour Girl

')

以上代碼執行結果如下:

Zara Ali/A Sweet & Sour Girl

'
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.