編寫CGI腳本:
最基本的Ruby CGI腳本看起來像這樣:
#!/usr/bin/rubyputs "HTTP/1.0 200 OK"puts "Content-type: text/html/n/n"puts "<html><body>This is a test</body></html>"
如果調用這個腳本 test.cgi 上傳到基于Unix/Linux的Web托管服務提供商并具有合適的權限,那么可以將它作為一個CGI腳本使用。
例如,如果有一個Linux的Web托管服務提供商托管的網站,如:http://www.yiibai.com/test.cgi 的主目錄,并給它執行權限,那么訪問 http://www.yiibai.com/test.cgi 應該返回一個HTML頁面顯示:This is a test.
這里時當 test.cgi 從Web瀏覽器請求,Web服務器看執行使用Ruby解釋器它。 Ruby腳本返回一個基本的HTTP頭,然后返回一個基本的HTML文檔。
使用 cgi.rb:
Ruby有一個特殊的稱為CGI庫,使更復雜的交互相比前面的CGI腳本。
讓我們創建一個基本的CGI使用CGI腳本:
#!/usr/bin/rubyrequire 'cgi'cgi = CGI.newputs cgi.headerputs "<html><body>This is a test</body></html>"
在這里,創建了一個CGI對象,并用它來打印標題行。
表單處理:
使用CGI類使可以訪問HTML查詢參數有兩種方法。假設我們給出 /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"]
如果表單包含多個具有相同名稱的字段,對應的值將被返回到腳本中為一個數組。[]存取器返回這些的只是第一個。
在這個例子中,假設名為“name”的表單有三個字段,我們輸入了三個名字 "Zara", "Huma" and "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方法。沒有單獨的處理這兩種不同的方法。
一個相關的,但基本形式,可以發送正確的數據,將有HTML代碼,就像這樣:
<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>
創建表單和HTML:
CGI包含大量的方法用于創建HTML。會發現每個標簽的方法之一。為了使這些方法,必須通過調用CGI.new創建一個CGI對象。
為了使標簽更容易嵌套,這些方法拿自己的內容作為代碼塊。代碼塊返回一個字符串,這將在作為標簽的內容。例如:
#!/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類的方法可以接受的方法參數,這將設置HTTP方法(GET,POST等)上使用的表單提交。缺省情況下,在這個例子中使用的是POST。
這將產生以下結果:
Content-Type: text/htmlContent-Length: 302<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN"><HTML><HEAD><TITLE>This Is a Test</TITLE></HEAD><BODY><FORM METHOD="post" ENCTYPE="application/x-www-form-urlencoded"><HR><H1>A Form: </H1><TEXTAREA COLS="70" NAME="get_text" ROWS="10"></TEXTAREA><BR><INPUT TYPE="submit"></FORM></BODY></HTML>
引用字符串:
當處理URL和HTML代碼,您必須謹慎地引用一些字符。例如,一個斜杠字符(/)在URL中具有特殊的意義,所以它必須被轉義,如果它不是部分路徑名。
例如,/查詢URL部分將被翻譯成字符串%2F/,使用它時必須翻譯??臻g和與符號特殊字符。為了處理這個問題,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('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
這將產生以下結果:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
新聞熱點
疑難解答
圖片精選