簡單介紹Ruby中的CGI編程
Ruby 是一門通用的語言,不僅僅是一門應(yīng)用于WEB開發(fā)的語言,但 Ruby 在WEB應(yīng)用及WEB工具中的開發(fā)是最常見的。
使用Ruby您不僅可以編寫自己的SMTP服務(wù)器,F(xiàn)TP程序,或Ruby Web服務(wù)器,而且還可以使用Ruby進(jìn)行CGI編程。
接下來,讓我們花點(diǎn)時(shí)間來學(xué)校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 文件中,上次到服務(wù)器并賦予足夠權(quán)限,即可作為 CGI 腳本執(zhí)行。
如果你站的的地址為http://www.example.com/ ,即可用過http://www.example.com/test.cgi 訪問該程序,輸出結(jié)果為: "This is a test."。
瀏覽器訪問該網(wǎng)址后,Web 服務(wù)器會(huì)在站點(diǎn)目錄下找到 test.cgi文件,然后通過Ruby解析器來解析腳本代碼并訪問HTML文檔。
使用 cgi.rb
Ruby 可以調(diào)用 CGI 庫來編寫更復(fù)雜的CGI腳本。
以下代碼調(diào)用了 CGI 庫來創(chuàng)建一個(gè)腳本的CGI腳本。
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
以下代碼中,創(chuàng)建了CGI 對(duì)象并打印頭部信息。
表單處理
使用CGI庫可以通過兩種方式獲取表單提交(或URL中的參數(shù))的數(shù)據(jù), 例如URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。
你可以使用 CGI#[] 來直接獲取參數(shù)FirstName和LastName:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]
另外一種獲取表單數(shù)據(jù)的方法:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]} h['FirstName'] # => ["Zara"] h['LastName'] # => ["Ali"]
以下代碼用于檢索所有的鍵值:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]
如果表單包含了多個(gè)相同名稱的字段,則該相同字段的值將保存在數(shù)組中。
以下實(shí)例中,指定表單中三個(gè)相同的字段"name",值分別為 "Zara", "Huma" 和 "Nuha":
#!/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 會(huì)自動(dòng)判斷 GET 和 POST 方法,所以無需對(duì)兩種方法區(qū)別對(duì)待。
以下是相關(guān)的HML代碼:
<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>
創(chuàng)建 Form 表單和 HTML
CGI 包含了大量的方法來創(chuàng)建 HTML,每個(gè)HTML標(biāo)簽都有相對(duì)應(yīng)的方法。 在使用這些方法前,比必須通過 CGI.new 來創(chuàng)建 CGI 對(duì)象。
為了使標(biāo)簽的嵌套更加的簡單,這些方法將內(nèi)容作為了代碼塊,代碼塊將返回字符串作為標(biāo)簽的內(nèi)容。如下所示:
#!/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 } } } }
字符串轉(zhuǎn)義
當(dāng)你在處理 URL 中的參數(shù)或者 HTML 表單數(shù)據(jù)時(shí),需要對(duì)指定的特殊字符進(jìn)行轉(zhuǎn)義,如:引號(hào)("),反斜杠(/)。
Ruby CGI 對(duì)象提供了CGI.escape 和 CGI.unescape 方法來處理這些特殊字符的轉(zhuǎn)義:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
以上代碼執(zhí)行結(jié)果如下:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
另一組實(shí)例:
#!/usr/bin/ruby require 'cgi' puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
以上代碼執(zhí)行結(jié)果如下:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
相關(guān)文章
python3學(xué)習(xí)之Splash的安裝與實(shí)例教程
splash 是一個(gè)python語言編寫的用于配合scrapy解析js的庫,下面這篇文章主要給大家介紹了關(guān)于python3學(xué)習(xí)之Splash的安裝與使用的一些相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07簡述python&pytorch 隨機(jī)種子的實(shí)現(xiàn)
這篇文章主要介紹了簡述python&pytorch 隨機(jī)種子的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10將字典轉(zhuǎn)換為DataFrame并進(jìn)行頻次統(tǒng)計(jì)的方法
下面小編就為大家分享一篇將字典轉(zhuǎn)換為DataFrame并進(jìn)行頻次統(tǒng)計(jì)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python首次安裝后運(yùn)行報(bào)錯(cuò)(0xc000007b)的解決方法
最近在安裝完P(guān)ython后運(yùn)行發(fā)現(xiàn)居然報(bào)錯(cuò)了,錯(cuò)誤代碼是0xc000007b,于是通過往上查找發(fā)現(xiàn)是因?yàn)槭状伟惭bPython缺乏VC++庫的原因,下面通過這篇文章看看如何解決這個(gè)問題吧。2016-10-10python機(jī)器學(xué)習(xí)MATLAB最小二乘法的兩種解讀
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)中MATLAB最小二乘法的兩種解讀方式,有需要的朋友可以借鑒參考下希望能夠有所幫助2022-02-02對(duì)網(wǎng)站內(nèi)嵌gradio應(yīng)用的輸入輸出做審核實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了對(duì)網(wǎng)站內(nèi)嵌gradio應(yīng)用的輸入輸出做審核實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04