用Ruby進行CGI編程的入門指引

來源:互聯網
上載者:User

用Ruby進行CGI編程的入門指引

   這篇文章主要介紹了用Ruby進行CGI編程的入門指引,編寫CGI指令碼也是Ruby用於網路編程的一項基礎功能,需要的朋友可以參考下

  編寫CGI指令碼:

  最基本的Ruby CGI指令碼看起來像這樣:

  ?

1

2

3

4

5

#!/usr/bin/ruby

 

puts "HTTP/1.0 200 OK"

puts "Content-type: text/htmlnn"

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指令碼:

  ?

1

2

3

4

5

6

7

#!/usr/bin/ruby

 

require 'cgi'

 

cgi = CGI.new

puts cgi.header

puts "<html><body>This is a test</body></html>"

  在這裡,建立了一個CGI對象,並用它來列印標題行。

  表單處理:

  使用CGI類使可以訪問HTML查詢參數有兩種方法。假設我們給出 /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali.

  可以訪問參數FirstName和LastName使用CGI#[]如下:

  ?

1

2

3

4

5

6

#!/usr/bin/ruby

 

require 'cgi'

cgi = CGI.new

cgi['FirstName'] # => ["Zara"]

cgi['LastName'] # => ["Ali"]

  還有另一種方法來訪問這些表單變數。此代碼會給出所有的項和值的雜湊值:

  ?

1

2

3

4

5

6

7

#!/usr/bin/ruby

 

require 'cgi'

cgi = CGI.new

h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}

h['FirstName'] # => ["Zara"]

h['LastName'] # => ["Ali"]

  以下是代碼來檢索所有的鍵:

  ?

1

2

3

4

5

#!/usr/bin/ruby

 

require 'cgi'

cgi = CGI.new

cgi.keys # => ["FirstName", "LastName"]

  如果表單包含多個具有相同名稱的欄位,對應的值將被返回到指令碼中為一個數組。[]存取器返回這些的只是第一個。

  在這個例子中,假設名為“name”的表單有三個欄位,我們輸入了三個名字 "Zara", "Huma" and "Nuha":

  ?

1

2

3

4

5

6

7

8

#!/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代碼,就像這樣:

  ?

1

2

3

4

5

6

7

8

9

10

11

<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對象。

  為了使標籤更容易嵌套,這些方法拿自己的內容作為代碼塊。代碼塊返回一個字串,這將在作為標籤的內容。例如:

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#!/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類的方法可以接受的方法參數,這將設定HTTP方法(GET,POST等)上使用的表單提交。預設情況下,在這個例子中使用的是POST。

  這將產生以下結果:

  ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Content-Type: text/html

Content-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/,使用它時必須翻譯。空間和與符號特殊字元。為了處理這個問題,CGI提供:在例行程式 CGI.escape 和 CGI.unescape.

  ?

1

2

3

4

#!/usr/bin/ruby

 

require 'cgi'

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

  這將產生以下結果:

  ?

1

2

3

4

5

6

Zara+Ali%2FA Sweet+%26+Sour+Girl")

 

#!/usr/bin/ruby

 

require 'cgi'

puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

  這將產生以下結果:

  ?

1

<h1>Zara Ali/A Sweet & Sour Girl</h1>'

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.