一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - 簡單介紹Ruby中的CGI編程

簡單介紹Ruby中的CGI編程

2020-06-03 10:24Ruby教程網 Ruby

這篇文章主要介紹了簡單介紹Ruby中的CGI編程,包括創建Form表單等基本內容,需要的朋友可以參考下

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腳本。

?
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庫可以通過兩種方式獲取表單提交(或URL中的參數)的數據, 例如URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。

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

?
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" 和 "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 方法,所以無需對兩種方法區別對待。

以下是相關的HML代碼:

?
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>

創建 Form 表單和 HTML

CGI 包含了大量的方法來創建 HTML,每個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
     }
   }
  }
}

字符串轉義

當你在處理 URL 中的參數或者 HTML 表單數據時,需要對指定的特殊字符進行轉義,如:引號("),反斜杠(/)。

Ruby 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
#!/usr/bin/ruby
 
require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

另一組實例:

?
1
2
3
4
#!/usr/bin/ruby
 
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

以上代碼執行結果如下:

?
1
&lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'

 

延伸 · 閱讀

精彩推薦
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
主站蜘蛛池模板: 免费看美女被靠到爽 | 我和么公的秘密小说免费 | 国产3344视频在线观看免费 | 亚洲欧美国产另类视频 | 91大神大战高跟丝袜美女 | 日韩首页 | 亚洲国产成人在人网站天堂 | 2021国产麻豆剧传媒剧情动漫 | 日本动漫啪啪动画片mv | 91赵邦贺 | 久久伊人在 | 91东航翘臀女神在线播放 | 免费观看一级一片 | 狗老公小说 | 色综合久久中文字幕 | 午夜精品久久久内射近拍高清 | 青青草国产青春综合久久 | jizz农村野外jizz农民 | 国产成人h视频在线播放网站 | girlfriend动漫在线播放 | 国产午夜久久精品 | 精品AV无码一二三区视频 | 涩涩屋在线播放 | 国产高清在线视频一区二区三区 | 黄a 大片a v 永久免费 | 艾秋麻豆果冻剧传媒在线播放 | 热99re久久精品国产首页 | 91麻豆精品国产91久久久 | 亚洲精品一区在线观看 | 欧美成年黄网站色高清视频 | 2020国产精品视频免费 | bt国产| 无遮无挡免费视频 | 国产成人福利色视频 | 久久亚洲成a人片 | bt天堂在线最新版在线 | 日本免费一区二区三区四区五六区 | 欧美日韩亚洲成人 | 欧美高清无砖专区欧美精品 | 国产精品麻豆 | 四虎影视4hutv最新地址在线 |