ndfweb.cn

INET控件的用法


2009-04-22 08:24:45 (6493)



Internet Transfer 控件實現了兩種廣泛使用的 Internet 協議: 超文本傳送協議(HyperText Transfer Protocol)(HTTP) 和文件傳送協議(File Transfer Protocol) (FTP)。使用 Internet Transfer 控件可以通過 OpenURL 或 Execute 方法連接到任何使用這兩個協議的站點並檢索文件。

可能的用途
在應用程序中添加 FTP 瀏覽器。
創建自動從公共 FTP 站點下載文件的應用程序。
分析 World Wide Web 站點中的圖形引用,並隻下載圖形。
提供以自定義格式顯示從 Web 頁獲得的動態數據。

基本操作
Internet Transfer 控件的功能依賴於將要使用的協議。由於所支持的兩種協議工作起來不盡相同,所能夠進行的操作就依賴於正在使用的協議。例如,GetHeader 方法隻能用於 HTTP(HTML 文檔)協議。

然而,有些過程對兩個協議是通用的。最基本的,如果要使用任何一個協議,則必須:
將 AccessType 屬性設置為合法的代理服務器。

用合法的 URL 調用 OpenURL 方法。
用合法的 URL 和協議支持的命令調用 Execute 方法。
用 GetChunk 方法從緩衝區獲取數據。

設置 AccessType 屬性:使用代理服務器
為了與 Internet 建立任何形式的連接,必須確定計算機如何連接到 Internet 上。如果在 intranet 上,可能需要提供代理服務器才能連接到 Internet 上。

簡單地說,代理服務器是計算機和 Internet 之間的媒介。intranet 上所有需要連接到 Internet 上的計算機,都必須通過代理服務器。代理行使 intranet 和 Internet 之間的防火牆功能,能夠阻止非法的最終用戶和外部請求,也就保護了 intranet 不受破壞。

要查找計算機中的代理設置值,請按照以下步驟執行:
注意 下麵的步驟隻能用於 Windows 95 和 Windows NT(R) 4.0 係統。
在計算機的“任務欄”中,單擊“啟動”。
在“設置”項中,單擊“控製麵板”。
雙擊“Internet”圖標。
在“Internet 屬性”對話框中,單擊“連接”。
在“代理服務器”中,確認選中了“通過代理服務器連接”複選框。
如果選中了,則單擊“設置”。在該對話框中可以找到能夠用於多種協議的代理服務器的名稱。如果沒有定義代理服務器,請與係統管理員聯係,以獲得可用的代理服務器。
如果希望使用對話框中未列出的代理服務器,可將 AccessType 屬性設置為 icNamedProxy (2)。然後將 Proxy 屬性設置為代理服務器的名稱,如下麵的代碼所示:

Inet1.Proxy = "myProxyName"
Inet1.AccessType = icNamedProxy

另一方麵,如果希望使用缺省代理服務器(由計算機的注冊表決定),則可以忽略 Proxy 屬性,而隻需將 AccessType 設置為 icUseDefault (0)。

AccessType 的設置值在下表中列出:

常數 值 描述
icUseDefault 0 (缺省)用作缺省。控件使用注冊表中的缺省設置訪問 Internet。
icDirect 1 直接連接 Internet。該控件可直接連接到 Internet。
icNamedProxy 2 命名的代理服務器。指示該控件使用 Proxy 屬性確定的代理服務器。


調用 OpenURL 方法
設置完 AccessType 屬性後,最基本的操作就是用合法的 URL 調用 OpenURL 方法。使用 OpenURL 方法時,操作所得到的結果將依賴於目標 URL。例如下麵的 URL 將返回在 www.microsoft.com 中找到的 HTML 文檔:

'名為“Text1”的 TextBox 控件保存了
'該方法的結果。Internet 傳輸
'控件的名稱是“Inet1”。
Text1.Text = Inet1.OpenURL("http://www.microsoft.com")

作為結果,TextBox 控件保存了 HTML 源碼
在這種情況下,缺省操作返回的是 URL 定位的 HTML 文檔。然而,如果 URL 被改為指向文本文件,則將獲得實際的文件。例如,下麵的代碼:

Text1.Text = Inet1. OpenURL("ftp://ftp.microsoft.com/disclaimer.txt")

將獲得文件的實際文本

提示 在使用 OpenURL 或 Execute 方法時,不需要設置 Protocol 屬性。Internet Transfer 控件會自動按 URL 的協議部分確定的協議來設置。

最後,可以用包含附加數據的 URL 調用 OpenURL 方法。例如,很多 Web 站點提供了搜索數據庫的能力。要搜索數據庫,則需要在發送的 URL 中包含搜索條件。例如下麵的代碼用條件“find=Maui”調用名為“search.exe”的搜索引擎。

Dim strURL As String
strURL ="http://www.howzit.com/cgi-bin/search.exe?find=maui "
Text1.Text = Inet1.OpenURL(strURL)

如果搜索引擎找到了符合條件的內容,將合成一個 HTML 文檔並攜帶適當的信息返回。

用 OpenURL 方法保存到文件
如果需要將通過 OpenURL 方法獲取的數據保存到文件,可以使用 Open、Put 和 Close 語句,如下麵的代碼所示。該示例先將獲得的二進製文件傳入 Byte 數組,然後將該數據保存到磁盤中:

Dim strURL As String
Dim bData() As Byte '數據變量
Dim intFile As Integer '可用文件變量
strURL = _
"ftp://ftp.microsoft.com/Softlib/Softlib.e xe"
intFile = FreeFile() '將 intFile 設置為未使用的文件
' OpenURL 方法的結果首先傳入 Byte 數組,
'然後將 Byte 數組保存到磁盤。
bData() = Inet1.OpenURL(strURL, icByteArray)
Open "C:\Temp\Softlib.e xe" For Binary Access Write _
As #intFile
Put #intFile, , bData()
Close #intFile

可用類似的過程將文本文件寫入磁盤中,不同的隻是不再需要 Byte 數組了,數據可以直接保存到文件中:

Dim strURL As String 'URL 字符串
Dim intFile As Integer '可用文件變量
IntFile = FreeFile()
strURL = "http://www.microsoft.com"
Open "c:\temp\MSsource.txt" For Output _
As #IntFile
Write #IntFile, Inet1.OpenURL(strURL)
Close #IntFile

同步和異步傳輸
OpenURL 方法以同步方式傳輸數據。在這裏,同步指的是傳輸操作未完成之前,不能執行其它過程。這樣數據傳輸就必須在執行其它代碼之前完成。

而 Execute 方法以異步方式傳輸數據。在調用 Execute 方法時,傳輸操作與其它過程無關。這樣,在調用 Execute 方法後,在後台接收數據的同時,即可同時執行其它代碼。

對 Internet Transfer 控件的使用者來說這意味著什麼?簡單地說,用 OpenURL 方法能夠直接得到可保存到磁盤的數據流(如上所述),或者直接在 TextBox 控件中閱覽(如果數據是文本格式的)。從另一方麵說,如果用 Execute 方法獲取數據,則必須用 StateChanged 事件監視該控件的連接狀態。當達到適當的狀態時,調用 GetChunk 方法從控件的緩衝區獲取數據。下麵更詳細地討論這一操作。

在 FPT 協議中使用 Execute 方法
Execute 方法具有四個參數:url、operation、data 和 requestHeaders。FTP 操作隻用到了 operation 參數和 url 參數,其中後者是可選的。例如,要從遠程計算機中得到一個文件,可用下麵的代碼:

Inet1.Execute "FTP://ftp.microsoft.com", _
"GET disclaimer.txt C:\Temp\Disclaimer.txt"

如果正在用 FTP 從匿名 FTP 服務器中獲取文件,就應熟悉在服務器目錄樹中漫遊的特定命令,以及將其中文件獲取到本地的硬盤中的命令。例如,要用 FPT 協議改變目錄,應使用帶有希望改變到的目錄路徑的“CD”命令。

對絕大多數通用操作,如將文件傳入服務器,以及從服務器獲取文件,Internet 傳輸控件在 Execute 方法中使用了(與 FTP)相同或相近的命令。例如,下麵的代碼將“CD”命令作為 Execute 方法的參數以改變路徑:

'txtURL 文本框包含了要打開的路徑。
'txtRemotePath 文本框包含了要改變到的路徑。
Inet1.Execute txtURL.Text, "CD " & txtRemotePath.Text

注意 在 Execute 方法中使用 FTP 命令時,沒有用到 data 和 requestHeaders 參數。所有的操作和它們的參數都在 operation 參數中作為字符串進行傳遞;參數之間用空格進行分隔。在下麵的描述中,不要把“file1”和“file2”項與 data 和 requestHeaders 參數搞混。

FTP 操作的語法是:

operationName file1 file2

例如,要獲取文件,在下麵的代碼中包含了操作的名稱 (“獲取”),以及該操作所需的兩個文件名:

'得到名為“Disclaimer.txt”的文件,並將其複製到
' C:\Temp\Disclaimer.txt。
Inet1.Execute, _
"GET Disclaimer.txt C:\Temp\Disclaimer.txt"

下表列出了該控件支持的 FTP 命令:

操作 描述 示例
CD file1 改變目錄。改變到由 file1 指定的目錄中。 Execute , "CD docs\mydocs"

CDUP 改變到父目錄。功能與“CD ..”相同。 Execute , "CDUP"

DELETE file1 刪除由 file1 指定的文件。 Execute , "DELETE discard.txt"

DIR [file1] 在由 file1 指定的目錄中查找。如果沒有指定 file1 目錄,則查找當前工作目錄。使用 GetChunk 方法返回數據。 Execute , "DIR /mydocs"

GET file1 file2 獲取由 file1 指定的遠程文件,並創建由 file2 指定的新的本地文件。 Execute , _
"GET getme.txt C:\gotme.txt"


MKDIR file1 創建由 file1 指定的目錄。是否能夠成功地執行,取決於用戶在遠程主機上的權限。 Execute , "MKDIR /myDir"

PUT file1 file2 將由 file1 指定的本地文件,複製到由 file2 指定的遠程主機文件中。 Execute , _
"PUT C:\putme.txt /putme.txt"


PWD 打印工作目錄。返回當前目錄的名稱。用 GetChunk 方法返回數據。 Execute , "PWD"

QUIT 結束當前連接。 Execute , "QUIT"

RECV file1 file2 與 GET 相同。 Execute , _
"RECV getme.txt C:\gotme.txt"

RENAME file1 file2 文件重命名。是否能夠成功地執行,取決於用戶在遠程主機上的權限。 Execute ,
"RENAME old.txt new.txt"

RMDIR file1 刪除目錄。是否能夠成功地執行,取決於用戶在遠程主機上的權限。 Execute , "RMDIR oldDir"

SEND file1 將文件複製到 FTP 站點。(與 PUT 相同) Execute , _
"SEND C:\putme.txt /putme.txt"

SIZE file1 返回由 file1 指定文件的大小。 Execute "SIZE /largefile.txt"

重點 如果代理服務器是 CERN 代理服務器,就不允許使用直接的 FTP 連接(使用 Execute 方法)。在這種情況下,要獲得文件,則需使用帶 Open、Put 和 Close 語句的 OpenURL 方法,就象前麵“用 OpenURL 方法保存到文件”提到的那樣。還可以用 OpenURL 方法得到目錄列表,即將目標目錄作為 URL,並調用該方法。

在 HTTP 協議上使用 Execute 方法
HTTP 協議允許客戶機用 GET、HEAD、POST 和 PUT 命令向服務器請求數據。下表中列出了這些操作:

操作 描述 示例
GET 獲取 url 中命名的文件。 Execute "http://www.microsoft.com" & _
"/default.htm", "GET"

HEAD 隻獲取 URL 屬性中命名的文件的文件標頭。 Execute , "HEAD"

POST 提供附加數據,以支持向遠程主機的請求。 Execute , "POST", strFormData

PUT 替換指定的 URL 中的數據。 Execute , "PUT", "replace.htm"

通用網關接口和 Execute 方法
很多 World Wide Web 站點提供了搜索數據庫的能力。它是通過 HTTP 協議用通用網關接口 (CGI) 發送查詢的能力完成的。

在這裏不再討論 CGI 了。然而,如果對 CGI 比較了解,就可用 Execute 方法構造一個應用程序模擬 World Wide Web 站點的行為。例如,下麵的代碼給出了典型的 CGI 查詢字符串:

http://www.yippee.com/cgi-bin/find.exe?find=Hangzhou

如下所示,用 Execute 方法也可以發送同樣的查詢:

Dim strURL As String, strFormData As String
strURL = "//www.yippee.com/cgi-bin/find.e xe"
strFormData = "find=Hangzhou"
Inet1.E xecute strURL, "POST", strFormData

如果希望得到從服務器發回的結果(如上麵的示例所示),就必須使用 GetChunk 方法以獲取作為結果的 HTML 文檔。

在 State 事件中使用 GetChunk 方法
在從遠程計算機下載數據時,將建立異步連接。例如,在 Execute 方法中使用“獲取”操作,將使服務器獲取請求的文件。當獲取了整個文件之後,State 參數將返回 icResponseCompleted (12)。在這時候,就可以用 GetChunk 方法從緩衝區中獲取數據了。下麵的示例中給出了這種情況:

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData As Variant '數據變量。
Select Case State
'...沒有給出其它情況。
Case icResponseCompleted '12
'打開文件用於寫入。
Open txtOperation For Binary Access _
Write As #intFile

'得到第一個大塊。注意:指定 Byte 數組
' (icByteArray) 以獲取二進製文件。
vtData = Inet1.GetChunk(1024, icString)

Do While LenB(vtData) > 0
Put #intFile, , vtData
'得到下一大塊。
vtData = Inet1.GetChunk(1024, icString)
Loop
Put #intFile, , vtData
Close #intFile
End Select
End Sub

登錄到 FTP 服務器
FTP 服務器有兩種:公用的和私用的。公用服務器,顧名思義,是對所有人開放的。而私用服務器,除了該服務器的真正用戶,其他人不能登錄。在這兩種情況下,FTP 協議都要求提供用戶名和密碼。這兩個參數用來驗明用戶,並允許(或禁止)進一步的操作。

要登錄到公用服務器,通常的做法是以“匿名”登錄 (UserName = "anonymous"),然後發送用戶的電子郵件名稱作為密碼。然而使用 Internet 傳輸控件這一過程還能夠進一步簡化。按照缺省規定,如果沒有提供 UserName 和 Password 屬性值,該控件發送“匿名”作為 UserName,用戶的電子郵件名稱作為 Password。

如果要登錄到私用服務器,隻需適當地設置 UserName、Password 和 URL 屬性,並調用 Execute 方法,如下麵的示例所示:

With Inet1
.URL = "ftp://ftp.someFTPSite.com"
.UserName = "John Smith"
.Password = "mAuI&9$6"
.Execute ,"DIR" '返回該目錄。
.Execute ,"CLOSE" '關閉連接。
End With

在調用 Execute 方法之後,FTP 連接仍舊打開著。這時可以繼續使用 Execute 方法完成其它 FTP 操作,比如 CD 和 GET。如果會話已經完成,使用 Execute 方法執行 CLOSE 操作以關閉連接。也可以通過改變 URL 屬性,並調用 OpenURL 或 Execute 方法,自動關閉該連接,這樣的操作會關閉當前 FTP 連接,並打開新的 URL。

本文版权:http://www.ndfweb.cn/news-294.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2025 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅