版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用VB的INET控件進(jìn)行文件的自動(dòng)上傳下載服務(wù)用VB的INET控件做FTP的上傳文件: sys_time = CDate(Now) sys_time = Replace(sys_time, ":", "") sys_time = Replace(sys_time, " ", "")erName = "ll" Inet1.Password = "ll" Inet1.Protocol = icFTP Inet1.RemoteHost = "1&qu
2、ot; Inet1.RemotePort = "27" Inet1.Execute , "PUT Dial.wav" + " " + newNameInet 控件也叫Internet Transfer 控件,這個(gè)控件封裝了http協(xié)議以及ftp協(xié)議,使用起來(lái)非常方便。所以大家經(jīng)常使用。然而大家通常使用的只是其部分功能,接下來(lái)我們講一下它的全部詳細(xì)功能,看過(guò)之后你也許會(huì)有眼前一亮的感覺(jué)。會(huì)猛然覺(jué)得我們之前懂得的只是皮毛。Internet Transfer 控件實(shí)現(xiàn)了兩種廣泛使用的 Internet 協(xié)議:超文本傳送協(xié)議(HyperTex
3、t Transfer Protocol)(也就是HTTP) 和文件傳送協(xié)議( Protocol) (即FTP)。使用 Internet Transfer 控件可以通過(guò) OpenURL 或 Execute 方法連接到任何使用這兩個(gè)協(xié)議的站點(diǎn)并檢索文件??梢宰龅降拇篌w方向在應(yīng)用程序中添加 FTP 瀏覽器。創(chuàng)建自動(dòng)從公共 FTP 站點(diǎn)下載文件的應(yīng)用程序。分析 World Wide Web 站點(diǎn)中的圖形引用,并只下載圖形。提供以自定義格式顯示從 Web 頁(yè)獲得的動(dòng)態(tài)數(shù)據(jù)。基本操作Internet Transfer 控件的功能依賴于將要使用的協(xié)議。由于所支持的兩種協(xié)議工作起來(lái)不盡相同,所能夠進(jìn)行的操作就
4、依賴于正在使用的協(xié)議。例如,GetHeader 方法只能用于 HTTP(HTML 文檔)協(xié)議。然而,有些過(guò)程對(duì)兩個(gè)協(xié)議是通用的。最基本的,如果要使用任何一個(gè)協(xié)議,則必須:將 AccessType 屬性設(shè)置為合法的代理服務(wù)器。用合法的 URL 調(diào)用 OpenURL 方法。用合法的 URL 和協(xié)議支持的命令調(diào)用 Execute 方法。用 GetChunk 方法從緩沖區(qū)獲取數(shù)據(jù)。設(shè)置 AccessType 屬性:使用代理服務(wù)器為了與 Internet 建立任何形式的連接,必須確定計(jì)算機(jī)如何連接到 Internet 上。如果在 intranet 上,可能需要提供代理服務(wù)器才能連接到 Internet
5、上。簡(jiǎn)單地說(shuō),代理服務(wù)器是計(jì)算機(jī)和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計(jì)算機(jī),都必須通過(guò)代理服務(wù)器。代理行使 intranet 和 Internet 之間的防火墻功能,能夠阻止非法的最終用戶和外部請(qǐng)求,也就保護(hù)了 intranet 不受破壞。要查找計(jì)算機(jī)中的代理設(shè)置值,請(qǐng)按照以下步驟執(zhí)行:打開(kāi)控制面板的Internet選項(xiàng)。在“Internet選項(xiàng)”對(duì)話框中,單擊“連接”。在“代理服務(wù)器”中,確認(rèn)選中了“通過(guò)代理服務(wù)器連接”復(fù)選框。如果選中了,則單擊“設(shè)置”。在該對(duì)話框中可以找到能夠用于多種協(xié)議的代理服務(wù)器的名稱。如果沒(méi)有定義代理服務(wù)器,請(qǐng)
6、與系統(tǒng)管理員聯(lián)系,以獲得可用的代理服務(wù)器。如果希望使用對(duì)話框中未列出的代理服務(wù)器,可將 AccessType 屬性設(shè)置為 icNamedProxy (2)。然后將 Proxy 屬性設(shè)置為代理服務(wù)器的名稱,如下面的代碼所示:Inet1.Proxy = "myProxyName"Inet1.AccessType = icNamedProxy另一方面,如果希望使用缺省代理服務(wù)器(由計(jì)算機(jī)的注冊(cè)表決定),則可以忽略 Proxy 屬性,而只需將 AccessType 設(shè)置為 icUseDefault (0)。AccessType 的設(shè)置值在下表中列出:常數(shù) 值 描述icUseDefa
7、ult 0 (缺?。┯米魅笔???丶褂米?cè)表中的缺省設(shè)置訪問(wèn) Internet。icDirect 1 直接連接 Internet。該控件可直接連接到 Internet。icNamedProxy 2 命名的代理服務(wù)器。指示該控件使用 Proxy 屬性確定的代理服務(wù)器。調(diào)用 OpenURL 方法'名為“Text1”的 TextBox 控件保存了'該方法的結(jié)果。Internet 傳輸'控件的名稱是“Inet1”。Text1.Text = Inet1.OpenURL("")作為結(jié)果,TextBox 控件保存了 HTML 源碼,它看上去應(yīng)和下圖顯示的相似:在這
8、種情況下,缺省操作返回的是 URL 定位的 HTML 文檔。然而,如果 URL 被改為指向文本文件,則將獲得實(shí)際的文件。例如,下面的代碼:Text1.Text = Inet1. _OpenURL("將獲得文件的實(shí)際文本,如下所示:提示 在使用 OpenURL 或 Execute 方法時(shí),不需要設(shè)置 Protocol 屬性。Internet Transfer 控件會(huì)自動(dòng)按 URL 的協(xié)議部分確定的協(xié)議來(lái)設(shè)置。最后,可以用包含附加數(shù)據(jù)的 URL 調(diào)用 OpenURL 方法。例如,很多 Web 站點(diǎn)提供了搜索數(shù)據(jù)庫(kù)的能力。要搜索數(shù)據(jù)庫(kù),則需要在發(fā)送的 URL 中包含搜索條件。例如下面的代碼
9、用條件“find=Maui”調(diào)用名為“searce”的搜索引擎。Dim strURL As StringstrURL = ""TeRL(strURL)如果搜索引擎找到了符合條件的內(nèi)容,將合成一個(gè) HTML 文檔并攜帶適當(dāng)?shù)男畔⒎祷?。?OpenURL 方法保存到文件如果需要將通過(guò) OpenURL 方法獲取的數(shù)據(jù)保存到文件,可以使用 Open、Put 和 Close 語(yǔ)句,如下面的代碼所示。該示例先將獲得的二進(jìn)制文件傳入 Byte 數(shù)組,然后將該數(shù)據(jù)保存到磁盤中:Dim strURL As StringDim bData() As Byte '數(shù)據(jù)變量Dim int
10、Integer '可用文件變量strURL = _" xe"intFile = FreeFile() '將 intFile 設(shè)置為未使用的文件' OpenURL 方法的結(jié)果首先傳入 Byte 數(shù)組,'然后將 Byte 數(shù)組保存到磁盤。bData() = Inet1.OpenURL(strURL, icByteArray)Open "C:TempSoftlib.e xe" For Binary Access Write _As #intFilePut #intFile, , bData()Close #intFile可用類似
11、的過(guò)程將文本文件寫入磁盤中,不同的只是不再需要 Byte 數(shù)組了,數(shù)據(jù)可以直接保存到文件中:Dim strURL As String 'URL 字符串Dim int Integer '可用文件變量IntFile = FreeFile()strURL = ""Open "c:tempMSsource.txt" For Output _As #IntFileWrite #IntFile, Inet1.OpenURL(strURL)Close #IntFile同步和異步傳輸OpenURL 方法以同步方式傳輸數(shù)據(jù)。在這里,同步指的是傳輸操作未完成
12、之前,不能執(zhí)行其它過(guò)程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時(shí),傳輸操作與其它過(guò)程無(wú)關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺(tái)接收數(shù)據(jù)的同時(shí),即可同時(shí)執(zhí)行其它代碼。對(duì) Internet Transfer 控件的使用者來(lái)說(shuō)這意味著什么?簡(jiǎn)單地說(shuō),用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說(shuō),如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控件的連接狀態(tài)。當(dāng)達(dá)到適當(dāng)?shù)臓顟B(tài)時(shí),調(diào)用
13、 GetChunk 方法從控件的緩沖區(qū)獲取數(shù)據(jù)。下面更詳細(xì)地討論這一操作。在 FPT 協(xié)議中使用 Execute 方法Execute 方法具有四個(gè)參數(shù):url、operation、data 和 requestHeaders。FTP 操作只用到了 operation 參數(shù)和 url 參數(shù),其中后者是可選的。例如,要從遠(yuǎn)程計(jì)算機(jī)中得到一個(gè)文件,可用下面的代碼:Inet1.Execute "", _"GET disclaimer.txt C:TempDisclaimer.txt"如果正在用 FTP 從匿名 FTP 服務(wù)器中獲取文件,就應(yīng)熟悉在服務(wù)器目錄樹(shù)中漫游
14、的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協(xié)議改變目錄,應(yīng)使用帶有希望改變到的目錄路徑的“CD”命令。對(duì)絕大多數(shù)通用操作,如將文件傳入服務(wù)器,以及從服務(wù)器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下面的代碼將“CD”命令作為 Execute 方法的參數(shù)以改變路徑:'txtURL 文本框包含了要打開(kāi)的路徑。'txtRemotePath 文本框包含了要改變到的路徑。Inet1.Execute txtURL.Text, "CD " & txtRemoteext注意
15、 在 Execute 方法中使用 FTP 命令時(shí),沒(méi)有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進(jìn)行傳遞;參數(shù)之間用空格進(jìn)行分隔。在下面的描述中,不要把“file1”和“file2”項(xiàng)與 data 和 requestHeaders 參數(shù)搞混。FTP 操作的語(yǔ)法是:operationName file1 file2例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個(gè)文件名:'得到名為“Disclaimer.txt”的文件,并將其復(fù)制到' t。Inet1.Execute,
16、_"GET Disclaimer.txt C:TempDisclaimer.txt"下表列出了該控件支持的 FTP 命令:操作 描述 示例CD file1 改變目錄。改變到由 file1 指定的目錄中。 Execute , "CD docsmydocs"CDUP 改變到父目錄。功能與“CD .”相同。 Execute , "CDUP"DELETE file1 刪除由 file1 指定的文件。 Execute , "DELETE discard.txt"DIR file1 在由 file1 指定的目錄中查找。如果沒(méi)有
17、指定 file1 目錄,則查找當(dāng)前工作目錄。使用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , "DIR /mydocs"GET file1 file2 獲取由 file1 指定的遠(yuǎn)程文件,并創(chuàng)建由 file2 指定的新的本地文件。 Execute , _"GET getme.txt C:gxt"MKDIR file1 創(chuàng)建由 file1 指定的目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , "MKDIR /myDir"PUT file1 file2 將由 file1 指定的本地文件,復(fù)制到由 f
18、ile2 指定的遠(yuǎn)程主機(jī)文件中。 Execute , _"PUT C:putme.txt /putme.txt"PWD 打印工作目錄。返回當(dāng)前目錄的名稱。用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , "PWD"QUIT 結(jié)束當(dāng)前連接。 Execute , "QUIT"RECV file1 file2 與 GET 相同。 Execute , _"RECV getme.txt C:gotme.txt"RENAME file1 file2 文件重命名。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Exe
19、cute ,"RENAME old.txt new.txt"RMDIR file1 刪除目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , "RMDIR oldDir"SEND file1 將文件復(fù)制到 FTP 站點(diǎn)。(與 PUT 相同) Execute , _"SEND C:putme.txt /putme.txt"SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /large"重點(diǎn) 如果代理服務(wù)器是 CERN 代理服務(wù)器,就不允許使用直接的 FTP
20、 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語(yǔ)句的 OpenURL 方法,就象前面“用 OpenURL 方法保存到文件”提到的那樣。還可以用 OpenURL 方法得到目錄列表,即將目標(biāo)目錄作為 URL,并調(diào)用該方法。在 HTTP 協(xié)議上使用 Execute 方法HTTP 協(xié)議允許客戶機(jī)用 GET、HEAD、POST 和 PUT 命令向服務(wù)器請(qǐng)求數(shù)據(jù)。下表中列出了這些操作:操作 描述 示例GET 獲取 url 中命名的文件。 Execute "" & _"/Index.html",
21、"GET"HEAD 只獲取 URL 屬性中命名的文件的文件標(biāo)頭。 Execute , "HEAD"POST 方法提供附加數(shù)據(jù)(學(xué)過(guò)網(wǎng)頁(yè)制作的或?qū)W過(guò)http協(xié)議的應(yīng)該知道),以支持向遠(yuǎn)程主機(jī)的請(qǐng)求。 Execute , "POST", strFormDataPUT 替換指定的 URL 中的數(shù)據(jù)。 Execute , "PUT", "replace.htm"通用網(wǎng)關(guān)接口和 Execute 方法很多 World Wide Web 站點(diǎn)提供了搜索數(shù)據(jù)庫(kù)的能力。它是通過(guò) HTTP 協(xié)議用通用網(wǎng)關(guān)接口 (C
22、GI) 發(fā)送查詢的能力完成的。在這里不再討論 CGI 了。然而,如果對(duì) CGI 比較了解,就可用 Execute 方法構(gòu)造一個(gè)應(yīng)用程序模擬 World Wide Web 站點(diǎn)的行為。例如,下面的代碼給出了典型的 CGI 查詢字符串:如下所示,用 Execute 方法也可以發(fā)送同樣的查詢:Dim strURL As String, strFormData As StringstrURL = ""strFormData = "wd=ibiancheng"Inet1.E xecute strURL, "POST", strFormData如
23、果希望得到從服務(wù)器發(fā)回的結(jié)果(如上面的示例所示),就必須使用控件的 GetChunk 方法以獲取作為結(jié)果的 HTML 文檔。在 State 事件中使用 GetChunk 方法在從遠(yuǎn)程計(jì)算機(jī)下載數(shù)據(jù)時(shí),將建立異步連接。例如,在 Execute 方法中使用“獲取”操作,將使服務(wù)器獲取請(qǐng)求的文件。當(dāng)獲取了整個(gè)文件之后,State 參數(shù)將返回 icResponseCompleted (12)。在這時(shí)候,就可以用 GetChunk 方法從緩沖區(qū)中獲取數(shù)據(jù)了。下面的示例中給出了這種情況:Private Sub Inet1_StateChanged(ByVal State As Integer)Dim vt
24、Data As Variant '數(shù)據(jù)變量。Select Case State'.沒(méi)有給出其它情況。Case icResponseCompleted '12'打開(kāi)文件用于寫入。Open txtOperation For Binary Access _Write As #intFile'得到第一個(gè)大塊。注意:指定 Byte 數(shù)組' (icByteArray) 以獲取二進(jìn)制文件。vtData = Inet1.GetChunk(1024, icString)Do While LenB(vtData) > 0Put #intFile, , vtDa
25、ta'得到下一大塊。etChunk(1024, icString)LoopPut #intFile, , vtDataClose #intFileEnd SelectEnd Sub登錄到 FTP 服務(wù)器FTP 服務(wù)器有兩種:公用的和私用的。公用服務(wù)器,顧名思義,是對(duì)所有人開(kāi)放的。而私用服務(wù)器,除了該服務(wù)器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個(gè)參數(shù)用來(lái)驗(yàn)明用戶,并允許(或禁止)進(jìn)一步的操作。要登錄到公用服務(wù)器,通常的做法是以“匿名”登錄 (UserName = "anonymous"),然后發(fā)送用戶的電子郵件名稱作為密碼
26、。然而使用 Internet 傳輸控件這一過(guò)程還能夠進(jìn)一步簡(jiǎn)化。按照缺省規(guī)定,如果沒(méi)有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。如果要登錄到私用服務(wù)器,只需適當(dāng)?shù)卦O(shè)置 UserName、Password 和 URL 屬性,并調(diào)用 Execute 方法,如下面的示例所示:With Inet1.URL = "".UserName = "John Smith".Password = "mAuI&9$6".Execute ,"DI
27、R" '返回該目錄。.Execute ,"CLOSE" '關(guān)閉連接。End With在調(diào)用 Execute 方法之后,F(xiàn)TP連接仍舊打開(kāi)著。這時(shí)可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會(huì)話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過(guò)改變 URL 屬性,并調(diào)用 OpenURL 或 Execute 方法,自動(dòng)關(guān)閉該連接,這樣的操作會(huì)關(guān)閉當(dāng)前 FTP 連接,并打開(kāi)新的 URL或IP。使用 Internet Transfer 控件 Internet Transfer 控件實(shí)現(xiàn)
28、了兩種廣泛使用的 Internet 協(xié)議: 超文本傳送協(xié)議(HyperText Transfer Protocol)(HTTP) 和文件傳送協(xié)議( Protocol) (FTP)。使用 Internet Transfer 控件可以通過(guò) OpenURL 或 Execute 方法連接到任何使用這兩個(gè)協(xié)議的站點(diǎn)并檢索文件。 可能的用途 在應(yīng)用程序中添加 FTP 瀏覽器。 創(chuàng)建自動(dòng)從公共 FTP 站點(diǎn)下載文件的應(yīng)用程序。 分析 World Wide Web 站點(diǎn)中的圖形引用,并只下載圖形。 提供以自定義格式顯示從 Web 頁(yè)獲得的動(dòng)態(tài)數(shù)據(jù)。 基本操作 Internet Transfer 控件的功能依賴
29、于將要使用的協(xié)議。由于所支持的兩種協(xié)議工作起來(lái)不盡相同,所能夠進(jìn)行的操作就依賴于正在使用的協(xié)議。例如,GetHeader 方法只能用于 HTTP(HTML 文檔)協(xié)議。 然而,有些過(guò)程對(duì)兩個(gè)協(xié)議是通用的。最基本的,如果要使用任何一個(gè)協(xié)議,則必須: 將 AccessType 屬性設(shè)置為合法的代理服務(wù)器。 用合法的 URL 調(diào)用 OpenURL 方法。 用合法的 URL 和協(xié)議支持的命令調(diào)用 Execute 方法。 用 GetChunk 方法從緩沖區(qū)獲取數(shù)據(jù)。 設(shè)置 AccessType 屬性:使用代理服務(wù)器 為了與 Internet 建立任何形式的連接,必須確定計(jì)算機(jī)如何連接到 Internet
30、 上。如果在 intranet 上,可能需要提供代理服務(wù)器才能連接到 Internet 上。 簡(jiǎn)單地說(shuō),代理服務(wù)器是計(jì)算機(jī)和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計(jì)算機(jī),都必須通過(guò)代理服務(wù)器。代理行使 intranet 和 Internet 之間的防火墻功能,能夠阻止非法的最終用戶和外部請(qǐng)求,也就保護(hù)了 intranet 不受破壞。 要查找計(jì)算機(jī)中的代理設(shè)置值,請(qǐng)按照以下步驟執(zhí)行: 注意 下面的步驟只能用于 Windows 95 和 系統(tǒng)。 在計(jì)算機(jī)的“任務(wù)欄”中,單擊“啟動(dòng)”。 在“設(shè)置”項(xiàng)中,單擊“控制面板”。 雙擊“Internet”圖
31、標(biāo)。 在“Internet 屬性”對(duì)話框中,單擊“連接”。 在“代理服務(wù)器”中,確認(rèn)選中了“通過(guò)代理服務(wù)器連接”復(fù)選框。 如果選中了,則單擊“設(shè)置”。在該對(duì)話框中可以找到能夠用于多種協(xié)議的代理服務(wù)器的名稱。如果沒(méi)有定義代理服務(wù)器,請(qǐng)與系統(tǒng)管理員聯(lián)系,以獲得可用的代理服務(wù)器。 如果希望使用對(duì)話框中未列出的代理服務(wù)器,可將 AccessType 屬性設(shè)置為 icNamedProxy (2)。然后將 Proxy 屬性設(shè)置為代理服務(wù)器的名稱,如下面的代碼所示: Inet1.Proxy = "myProxyName" Inet1.AccessType = icNamedProxy 另
32、一方面,如果希望使用缺省代理服務(wù)器(由計(jì)算機(jī)的注冊(cè)表決定),則可以忽略 Proxy 屬性,而只需將 AccessType 設(shè)置為 icUseDefault (0)。 AccessType 的設(shè)置值在下表中列出: 常數(shù) 值 描述 icUseDefault 0 (缺?。┯米魅笔???丶褂米?cè)表中的缺省設(shè)置訪問(wèn) Internet。 icDirect 1 直接連接 Internet。該控件可直接連接到 Internet。 icNamedProxy 2 命名的代理服務(wù)器。指示該控件使用 Proxy 屬性確定的代理服務(wù)器。 調(diào)用 OpenURL 方法 設(shè)置完 AccessType 屬性后,最基本的操作就是
33、用合法的 URL 調(diào)用 OpenURL 方法。使用 OpenURL 方法時(shí),操作所得到的結(jié)果將依賴于目標(biāo) URL。例如下面的 URL 將返回在中找到的 HTML 文檔: '名為“Text1”的 TextBox 控件保存了 '該方法的結(jié)果。Internet 傳輸 '控件的名稱是“Inet1”。 Text1.Text = Inet1.OpenURL("") 作為結(jié)果,TextBox 控件保存了 HTML 源碼,它看上去應(yīng)和下圖顯示的相似: 在這種情況下,缺省操作返回的是 URL 定位的 HTML 文檔。然而,如果 URL 被改為指向文本文件,則將獲得實(shí)際
34、的文件。例如,下面的代碼: Text1.Text = Inet1. _ OpenURL(".com/disclaimer.txt") 將獲得文件的實(shí)際文本,如下所示: 提示 在使用 OpenURL 或 Execute 方法時(shí),不需要設(shè)置 Protocol 屬性。Internet Transfer 控件會(huì)自動(dòng)按 URL 的協(xié)議部分確定的協(xié)議來(lái)設(shè)置。 最后,可以用包含附加數(shù)據(jù)的 URL 調(diào)用 OpenURL 方法。例如,很多 Web 站點(diǎn)提供了搜索數(shù)據(jù)庫(kù)的能力。要搜索數(shù)據(jù)庫(kù),則需要在發(fā)送的 URL 中包含搜索條件。例如下面的代碼用條件“find=Maui”調(diào)用名為“e”的搜索引
35、擎。 Dim strURL As String strURL = _ " xe?find=maui Text1.Text = Inet1.OpenURL(strURL) 如果搜索引擎找到了符合條件的內(nèi)容,將合成一個(gè) HTML 文檔并攜帶適當(dāng)?shù)男畔⒎祷亍?用 OpenURL 方法保存到文件 如果需要將通過(guò) OpenURL 方法獲取的數(shù)據(jù)保存到文件,可以使用 Open、Put 和 Close 語(yǔ)句,如下面的代碼所示。該示例先將獲得的二進(jìn)制文件傳入 Byte 數(shù)組,然后將該數(shù)據(jù)保存到磁盤中: Dim strURL As String Dim bData() As Byte '數(shù)據(jù)變
36、量 Dim int Integer '可用文件變量 strURL = _ " xe" intFile = FreeFile() '將 intFile 設(shè)置為未使用的文件 ' OpenURL 方法的結(jié)果首先傳入 Byte 數(shù)組, '然后將 Byte 數(shù)組保存到磁盤。 bData() = Inet1.OpenURL(strURL, icByteArray) Open "C:TempSoftlib.e xe" For Binary Access Write _ As #intFile Put #intFile, , bData(
37、) Close #intFile 可用類似的過(guò)程將文本文件寫入磁盤中,不同的只是不再需要 Byte 數(shù)組了,數(shù)據(jù)可以直接保存到文件中: Dim strURL As String 'URL 字符串 Dim int Integer '可用文件變量 IntFile = FreeFile() strURL = "" Open "c:tempMSsource.txt" For Output _ As #IntFile Write #IntFile,(strURL) Close #IntFile 同步和異步傳輸 OpenURL 方法以同步方式傳輸數(shù)據(jù)
38、。在這里,同步指的是傳輸操作未完成之前,不能執(zhí)行其它過(guò)程。這樣數(shù)據(jù)傳輸就必須在執(zhí)行其它代碼之前完成。 而 Execute 方法以異步方式傳輸數(shù)據(jù)。在調(diào)用 Execute 方法時(shí),傳輸操作與其它過(guò)程無(wú)關(guān)。這樣,在調(diào)用 Execute 方法后,在后臺(tái)接收數(shù)據(jù)的同時(shí),即可同時(shí)執(zhí)行其它代碼。 對(duì) Internet Transfer 控件的使用者來(lái)說(shuō)這意味著什么?簡(jiǎn)單地說(shuō),用 OpenURL 方法能夠直接得到可保存到磁盤的數(shù)據(jù)流(如上所述),或者直接在 TextBox 控件中閱覽(如果數(shù)據(jù)是文本格式的)。從另一方面說(shuō),如果用 Execute 方法獲取數(shù)據(jù),則必須用 StateChanged 事件監(jiān)視該控
39、件的連接狀態(tài)。當(dāng)達(dá)到適當(dāng)?shù)臓顟B(tài)時(shí),調(diào)用 GetChunk 方法從控件的緩沖區(qū)獲取數(shù)據(jù)。下面更詳細(xì)地討論這一操作。 在 FPT 協(xié)議中使用 Execute 方法 Execute 方法具有四個(gè)參數(shù):url、operation、data 和 requestHeaders。FTP 操作只用到了 operation 參數(shù)和 url 參數(shù),其中后者是可選的。例如,要從遠(yuǎn)程計(jì)算機(jī)中得到一個(gè)文件,可用下面的代碼: Inet1.Execute "", _ "GET disclaimer.txt C:TempDisclaimer.txt" 如果正在用 FTP 從匿名 FTP
40、 服務(wù)器中獲取文件,就應(yīng)熟悉在服務(wù)器目錄樹(shù)中漫游的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協(xié)議改變目錄,應(yīng)使用帶有希望改變到的目錄路徑的“CD”命令。 對(duì)絕大多數(shù)通用操作,如將文件傳入服務(wù)器,以及從服務(wù)器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下面的代碼將“CD”命令作為 Execute 方法的參數(shù)以改變路徑: 'txtURL 文本框包含了要打開(kāi)的路徑。 'txtRemotePath 文本框包含了要改變到的路徑。 Inet1.Execute txtURL.Text, "CD
41、 " & txtRemotePath.Text 注意 在 Execute 方法中使用 FTP 命令時(shí),沒(méi)有用到 data 和 requestHeaders 參數(shù)。所有的操作和它們的參數(shù)都在 operation 參數(shù)中作為字符串進(jìn)行傳遞;參數(shù)之間用空格進(jìn)行分隔。在下面的描述中,不要把“file1”和“file2”項(xiàng)與 data 和 requestHeaders 參數(shù)搞混。 FTP 操作的語(yǔ)法是: operationName file1 file2 例如,要獲取文件,在下面的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個(gè)文件名: '得到名為“t”的文件,并將其
42、復(fù)制到 t。 Inet1.Execute, _ "GET Disclaimer.txt C:TempDisclaimer.txt" 下表列出了該控件支持的 FTP 命令: 操作 描述 示例 CD file1 改變目錄。改變到由 file1 指定的目錄中。 Execute , "CD docsmydocs" CDUP 改變到父目錄。功能與“CD .”相同。 Execute , "CDUP" DELETE file1 刪除由 file1 指定的文件。 Execute , "DELETE discard.txt" DIR
43、 file1 在由 file1 指定的目錄中查找。如果沒(méi)有指定 file1 目錄,則查找當(dāng)前工作目錄。使用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , "DIR /mydocs" GET file1 file2 獲取由 file1 指定的遠(yuǎn)程文件,并創(chuàng)建由 file2 指定的新的本地文件。 Execute , _ "GET getme.txt C:gotme.txt" MKDIR file1 創(chuàng)建由 file1 指定的目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , "MKDIR /myDir"
44、PUT file1 file2 將由 file1 指定的本地文件,復(fù)制到由 file2 指定的遠(yuǎn)程主機(jī)文件中。 Execute , _ "PUT C:putme.txt /putme.txt" PWD 打印工作目錄。返回當(dāng)前目錄的名稱。用 GetChunk 方法返回?cái)?shù)據(jù)。 Execute , "PWD" QUIT 結(jié)束當(dāng)前連接。 Execute , "QUIT" RECV file1 file2 與 GET 相同。 Execute , _ "RECV getme.txt C:gotme.txt" RENAME fi
45、le1 file2 文件重命名。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , "RENAME old.txt new.txt" RMDIR file1 刪除目錄。是否能夠成功地執(zhí)行,取決于用戶在遠(yuǎn)程主機(jī)上的權(quán)限。 Execute , "RMDIR oldDir" SEND file1 將文件復(fù)制到 FTP 站點(diǎn)。(與 PUT 相同) Execute , _ t /putme.txt" SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /large" 重點(diǎn) 如果代
46、理服務(wù)器是 CERN 代理服務(wù)器,就不允許使用直接的 FTP 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語(yǔ)句的 OpenURL 方法,就象前面“用 OpenURL 方法保存到文件”提到的那樣。還可以用 OpenURL 方法得到目錄列表,即將目標(biāo)目錄作為 URL,并調(diào)用該方法。 在 HTTP 協(xié)議上使用 Execute 方法 HTTP 協(xié)議允許客戶機(jī)用 GET、HEAD、POST 和 PUT 命令向服務(wù)器請(qǐng)求數(shù)據(jù)。下表中列出了這些操作: 操作 描述 示例 GET 獲取 url 中命名的文件。 Execute ""
47、; & _ "/default.htm", "GET" HEAD 只獲取 URL 屬性中命名的文件的文件標(biāo)頭。 Execute , "HEAD" POST 提供附加數(shù)據(jù),以支持向遠(yuǎn)程主機(jī)的請(qǐng)求。 Execute , "POST", strFormData PUT 替換指定的 URL 中的數(shù)據(jù)。 Execute , "PUT", "replace.htm" 通用網(wǎng)關(guān)接口和 Execute 方法 很多 World Wide Web 站點(diǎn)提供了搜索數(shù)據(jù)庫(kù)的能力。它是通過(guò) H
48、TTP 協(xié)議用通用網(wǎng)關(guān)接口 (CGI) 發(fā)送查詢的能力完成的。 在這里不再討論 CGI 了。然而,如果對(duì) CGI 比較了解,就可用 Execute 方法構(gòu)造一個(gè)應(yīng)用程序模擬 World Wide Web 站點(diǎn)的行為。例如,下面的代碼給出了典型的 CGI 查詢字符串: xe?find=Hangzhou 如下所示,用 Execute 方法也可以發(fā)送同樣的查詢: Dim strURL As String, strFormData As String strURL = "/ xe" strFormData = "find=Hangzhou" Inet1.E xe
49、cute strURL, "POST", strFormData 如果希望得到從服務(wù)器發(fā)回的結(jié)果(如上面的示例所示),就必須使用 GetChunk 方法以獲取作為結(jié)果的 HTML 文檔。 在 State 事件中使用 GetChunk 方法 在從遠(yuǎn)程計(jì)算機(jī)下載數(shù)據(jù)時(shí),將建立異步連接。例如,在 Execute 方法中使用“獲取”操作,將使服務(wù)器獲取請(qǐng)求的文件。當(dāng)獲取了整個(gè)文件之后,State 參數(shù)將返回 icResponseCompleted (12)。在這時(shí)候,就可以用 GetChunk 方法從緩沖區(qū)中獲取數(shù)據(jù)了。下面的示例中給出了這種情況: Private Sub Inet
50、1_StateChanged(ByVal State As Integer) Dim vtData As Variant '數(shù)據(jù)變量。 Select Case State '.沒(méi)有給出其它情況。 Case icResponseCompleted '12 '打開(kāi)文件用于寫入。 Open txtOperation For Binary Access _ Write As #intFile '得到第一個(gè)大塊。注意:指定 Byte 數(shù)組 ' (icByteArray) 以獲取二進(jìn)制文件。 vtData = Inet1.GetChunk(1024, icS
51、tring) Do While LenB(vtData) > 0 Put #intFile, , vtData '得到下一大塊。 vtData = Inet1.GetChunk(1024, icString) Loop Put #intFile, , vtData Close #intFile End Select End Sub 登錄到 FTP 服務(wù)器 FTP 服務(wù)器有兩種:公用的和私用的。公用服務(wù)器,顧名思義,是對(duì)所有人開(kāi)放的。而私用服務(wù)器,除了該服務(wù)器的真正用戶,其他人不能登錄。在這兩種情況下,F(xiàn)TP 協(xié)議都要求提供用戶名和密碼。這兩個(gè)參數(shù)用來(lái)驗(yàn)明用戶,并允許(或禁止)進(jìn)一
52、步的操作。 要登錄到公用服務(wù)器,通常的做法是以“匿名”登錄 (UserName = "anonymous"),然后發(fā)送用戶的電子郵件名稱作為密碼。然而使用 Internet 傳輸控件這一過(guò)程還能夠進(jìn)一步簡(jiǎn)化。按照缺省規(guī)定,如果沒(méi)有提供 UserName 和 Password 屬性值,該控件發(fā)送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。 如果要登錄到私用服務(wù)器,只需適當(dāng)?shù)卦O(shè)置 UserName、Password 和 URL 屬性,并調(diào)用 Execute 方法,如下面的示例所示: With Inet1 .URL = "" .U
53、serName = "John Smith" .Password = "mAuI&9$6" .Execute ,"DIR" '返回該目錄。 .Execute ,"CLOSE" '關(guān)閉連接。 End With 在調(diào)用 Execute 方法之后,F(xiàn)TP 連接仍舊打開(kāi)著。這時(shí)可以繼續(xù)使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會(huì)話已經(jīng)完成,使用 Execute 方法執(zhí)行 CLOSE 操作以關(guān)閉連接。也可以通過(guò)改變 URL 屬性,并調(diào)用 OpenURL 或 Exec
54、ute 方法,自動(dòng)關(guān)閉該連接,這樣的操作會(huì)關(guān)閉當(dāng)前 FTP 連接,并打開(kāi)新的 URL對(duì)于FTP,你可以使用Execute方法執(zhí)行FTP命令SIZE獲得文件大小。然后在StateChanged事件中可以獲得返回的文件大小。 Private Sub Command1_Click() Inet1.Execute "", "SIZE 1.gif" End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) 'State = 12 時(shí),用 GetChunk 方法檢索服務(wù)器的響應(yīng)。 Dim v
55、tData As Variant ' Data variable. Select Case State '.沒(méi)有列舉其它情況。 Case icError '11 '出現(xiàn)錯(cuò)誤時(shí),返回 ResponseCode 和 ResponseInfo。 vtData = Inet1.ResponseCode & ":" & _ Inet1.ResponseInfo Case icResponseCompleted ' 12 Dim strData As String Dim bDone As Boolean: bDone = Fal
56、se '取得第一個(gè)塊。 vtData = Inet1.GetChunk(1024, icString) DoEvents Do While Not bDone strData = strData & vtData '取得下一個(gè)塊。 vtData = Inet1.GetChunk(1024, icString) DoEvents If Len(vtData) = 0 Then bDone = True End If Loop MsgBox strData End Select End Sub 對(duì)于HTTP下載,你可以用GetHeader(Content-length)來(lái)獲
57、得文件大小。但不是所有HTTP下載時(shí)都能獲得文件長(zhǎng)度,特別是通過(guò)代理服務(wù)器下載文件時(shí)。如: Private Sub Form_Load() Inet1.Execute "" End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) If State = icResponseReceived Then MsgBox " is " & Inet1.GetHeader("Content-Length") End If End Sub=在VB中實(shí)現(xiàn)文件上傳 Visua
58、lBasic作為一個(gè)集應(yīng)用程序開(kāi)發(fā)、測(cè)試、查錯(cuò)功能于一體的集成式開(kāi)發(fā)環(huán)境,越來(lái)越受到程序員的青睞。筆者在開(kāi)發(fā)某數(shù)據(jù)庫(kù)維護(hù)系統(tǒng)的過(guò)程中,選擇了VB5.0作為開(kāi)發(fā)平臺(tái),Unix作為服務(wù)器端操作系統(tǒng),Informix作為服務(wù)器數(shù)據(jù)庫(kù)。 問(wèn)題的出現(xiàn) 在開(kāi)發(fā)該維護(hù)系統(tǒng)的過(guò)程中,注意到Informix數(shù)據(jù)庫(kù)的字段類型CLOB填入數(shù)據(jù)時(shí)需要函數(shù) ("","SERVER"),其中的""需要指出文件路徑和文件名稱。然而,在維護(hù)過(guò)程中此文件是 在客戶端執(zhí)行的,這樣就要求即時(shí)將文件傳輸?shù)椒?wù)器端。 解決辦法 P傳輸工具 我們首先使用FTP傳輸工具,用VB5
59、.0中SHELL命令調(diào)用DOS批處理文件來(lái)實(shí)現(xiàn)傳輸?shù)男枰?Shell調(diào)用格式: Shell(pathname,windowstyle) 例子:Shell("c:windowsupload.bat") 批處理文件t的內(nèi)容: c:windows username password sendc:zrhupload.txtupload.txt bye 該命令實(shí)現(xiàn)了文件"的傳輸要求。在使用完畢之后,再調(diào)用命令把該文件刪除。 例子:Shell("c:windowsdel_up.bat") 批處理文件t的內(nèi)容: c:windows username password deleupload.txt bye 這樣,文件"被刪除。 但是,另一個(gè)問(wèn)題出現(xiàn)了。由于Shell函數(shù)的運(yùn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理健康教育在校園文化建設(shè)中的作用與思考
- 二零二五年度通信基站建設(shè)與維護(hù)合同3篇
- 2025年度廠房施工合同范本:新型建筑防水材料采購(gòu)協(xié)議3篇
- 二零二五年度航空航天合伙人利潤(rùn)共享協(xié)議3篇
- 個(gè)人股東分紅規(guī)則:2024權(quán)威版協(xié)議版A版
- 2024版美容美發(fā)店租賃合同
- 二零二五年度飛機(jī)購(gòu)銷合同附帶航空器租賃及融資租賃條款3篇
- 2024贊助合同書范本:電影制作贊助合作協(xié)議3篇
- 二零二五年度企業(yè)培訓(xùn)與人才交流協(xié)議3篇
- 三方代收代付業(yè)務(wù)委托協(xié)議(2024年度版)版B版
- 綜合實(shí)踐活動(dòng)教案三上
- 公交公司風(fēng)險(xiǎn)分級(jí)管控臺(tái)賬
- 食品安全應(yīng)急管理和突發(fā)事故報(bào)告制度
- 《新能源汽車電氣設(shè)備構(gòu)造與維修》項(xiàng)目三 新能源汽車照明與信號(hào)系統(tǒng)檢修
- 國(guó)際貿(mào)易風(fēng)險(xiǎn)防范與應(yīng)對(duì)指南
- 2024年新課標(biāo)《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)》測(cè)試題(附含答案)
- 2023年宜賓五糧液股份有限公司社會(huì)招聘考試真題
- 2024新教科版一年級(jí)科學(xué)上冊(cè)全冊(cè)教案
- 2024兒童身高現(xiàn)狀報(bào)告
- 統(tǒng)編版六年級(jí)語(yǔ)文上冊(cè)教學(xué)設(shè)計(jì)教案打印版
- 醫(yī)院培訓(xùn)課件:《靜脈中等長(zhǎng)度導(dǎo)管臨床應(yīng)用專家共識(shí)》
評(píng)論
0/150
提交評(píng)論