佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 用Ruby進(jìn)行CGI編程的入門指引

用Ruby進(jìn)行CGI編程的入門指引

熱門標(biāo)簽:語(yǔ)音系統(tǒng) 硅谷的囚徒呼叫中心 Win7旗艦版 客戶服務(wù) 企業(yè)做大做強(qiáng) 百度AI接口 呼叫中心市場(chǎng)需求 電話運(yùn)營(yíng)中心

編寫CGI腳本:

最基本的Ruby CGI腳本看起來(lái)像這樣:

#!/usr/bin/ruby

puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "html>body>This is a test/body>/html>"

如果調(diào)用這個(gè)腳本 test.cgi 上傳到基于Unix/Linux的Web托管服務(wù)提供商并具有合適的權(quán)限,那么可以將它作為一個(gè)CGI腳本使用。

例如,如果有一個(gè)Linux的Web托管服務(wù)提供商托管的網(wǎng)站,如:http://www.yiibai.com/test.cgi 的主目錄,并給它執(zhí)行權(quán)限,那么訪問(wèn) http://www.yiibai.com/test.cgi 應(yīng)該返回一個(gè)HTML頁(yè)面顯示:This is a test.

這里時(shí)當(dāng) test.cgi 從Web瀏覽器請(qǐng)求,Web服務(wù)器看執(zhí)行使用Ruby解釋器它。 Ruby腳本返回一個(gè)基本的HTTP頭,然后返回一個(gè)基本的HTML文檔。
使用 cgi.rb:

Ruby有一個(gè)特殊的稱為CGI庫(kù),使更復(fù)雜的交互相比前面的CGI腳本。

讓我們創(chuàng)建一個(gè)基本的CGI使用CGI腳本:

#!/usr/bin/ruby

require 'cgi'

cgi = CGI.new
puts cgi.header
puts "html>body>This is a test/body>/html>"

在這里,創(chuàng)建了一個(gè)CGI對(duì)象,并用它來(lái)打印標(biāo)題行。
表單處理:

使用CGI類使可以訪問(wèn)HTML查詢參數(shù)有兩種方法。假設(shè)我們給出 /cgi-bin/test.cgi?FirstName=ZaraLastName=Ali.

可以訪問(wèn)參數(shù)FirstName和LastName使用CGI#[]如下:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # => ["Zara"]
cgi['LastName'] # => ["Ali"]

還有另一種方法來(lái)訪問(wèn)這些表單變量。此代碼會(huì)給出所有的項(xiàng)和值的哈希值:

#!/usr/bin/ruby

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

以下是代碼來(lái)檢索所有的鍵:

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys     # => ["FirstName", "LastName"]

如果表單包含多個(gè)具有相同名稱的字段,對(duì)應(yīng)的值將被返回到腳本中為一個(gè)數(shù)組。[]存取器返回這些的只是第一個(gè)。

在這個(gè)例子中,假設(shè)名為“name”的表單有三個(gè)字段,我們輸入了三個(gè)名字 "Zara", "Huma" and "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方法。沒(méi)有單獨(dú)的處理這兩種不同的方法。

一個(gè)相關(guān)的,但基本形式,可以發(fā)送正確的數(shù)據(jù),將有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>

創(chuàng)建表單和HTML:

CGI包含大量的方法用于創(chuàng)建HTML。會(huì)發(fā)現(xiàn)每個(gè)標(biāo)簽的方法之一。為了使這些方法,必須通過(guò)調(diào)用CGI.new創(chuàng)建一個(gè)CGI對(duì)象。

為了使標(biāo)簽更容易嵌套,這些方法拿自己的內(nèi)容作為代碼塊。代碼塊返回一個(gè)字符串,這將在作為標(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
     }
   }
  }
}

注:CGI類的方法可以接受的方法參數(shù),這將設(shè)置HTTP方法(GET,POST等)上使用的表單提交。缺省情況下,在這個(gè)例子中使用的是POST。

這將產(chǎn)生以下結(jié)果:

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>

引用字符串:

當(dāng)處理URL和HTML代碼,您必須謹(jǐn)慎地引用一些字符。例如,一個(gè)斜杠字符(/)在URL中具有特殊的意義,所以它必須被轉(zhuǎn)義,如果它不是部分路徑名。

例如,/查詢URL部分將被翻譯成字符串%2F/,使用它時(shí)必須翻譯。空間和與符號(hào)特殊字符。為了處理這個(gè)問(wèn)題,CGI提供:在例行程序 CGI.escape 和 CGI.unescape.

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet  Sour Girl")

這將產(chǎn)生以下結(jié)果:

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

#!/usr/bin/ruby

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

這將產(chǎn)生以下結(jié)果:

lt;h1gt;Zara Ali/A Sweet  Sour Girllt;/h1gt;'

您可能感興趣的文章:
  • 如何用C寫一個(gè)web服務(wù)器之GCC項(xiàng)目編譯
  • 如何用C寫一個(gè)web服務(wù)器之I/O多路復(fù)用
  • 如何用C寫一個(gè)web服務(wù)器之基礎(chǔ)功能
  • 基于Python_腳本CGI、特點(diǎn)、應(yīng)用、開(kāi)發(fā)環(huán)境(詳解)
  • 編寫Python CGI腳本的教程
  • perl的cgi高級(jí)編程介紹
  • 如何用C寫一個(gè)web服務(wù)器之CGI協(xié)議

標(biāo)簽:海南 安康 濟(jì)南 崇左 長(zhǎng)沙 山西 喀什 山西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用Ruby進(jìn)行CGI編程的入門指引》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    酒泉市| 三穗县| 绿春县| 交口县| 繁峙县| 岚皋县| 华安县| 扬州市| 积石山| 夏邑县| 郎溪县| 远安县| 丰台区| 勃利县| 边坝县| 盘山县| 神木县| 宽城| 镇沅| 三河市| 廊坊市| 翼城县| 新河县| 龙岩市| 六安市| 互助| 施甸县| 重庆市| 长汀县| 中超| 宁夏| 乌兰县| 江城| 老河口市| 慈溪市| 玉门市| 黎平县| 卢龙县| 铜山县| 大冶市| 普洱|