Inet控件(又叫Internet Transfer 控件)的几个常用用法

Eddy 发布于2010-7-10 20:51:28 分类: 程序设计 已浏览loading 网友评论0条 我要评论

用 OpenURL 方法保存到文件
如果需要将通过 OpenURL 方法获取的数据保存到文件,可以使用 Open、Put 和 Close 语句,如下面的代码所示。该示例先将获得的二进制文件传入 Byte 数组,然后将该数据保存到磁盘中:

Dim strURL As String
Dim bData() As Byte '数据变量
Dim intFile As Integer '可用文件变量
strURL = "www.rrgod.com/rj.exe"
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.rrgod.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"

在 HTTP 协议上使用 Execute 方法
HTTP 协议允许客户机用 GET、HEAD、POST 和 PUT 命令向服务器请求数据。下表中列出了这些操作:

操作 描述 示例
GET 获取 url 中命名的文件。 Execute "http://www.rrgod.com" & _
"/Index.html", "GET"


HEAD 只获取 URL 属性中命名的文件的文件标头。 Execute , "HEAD"

POST 方法提供附加数据(学过网页制作的或学过http协议的应该知道),以支持向远程主机的请求。 Execute , "POST", strFormData

PUT 替换指定的 URL 中的数据。 Execute , "PUT", "replace.htm"

 

通用网关接口和 Execute 方法
很多 World Wide Web 站点提供了搜索数据库的能力。它是通过 HTTP 协议用通用网关接口 (CGI) 发送查询的能力完成的。

在这里不再讨论 CGI 了。然而,如果对 CGI 比较了解,就可用 Execute 方法构造一个应用程序模拟 World Wide Web 站点的行为。例如,下面的代码给出了典型的 CGI 查询字符串:

http://www.baidu.com/s?wd=ibiancheng

如下所示,用 Execute 方法也可以发送同样的查询:

Dim strURL As String, strFormData As String
strURL = "http://www.baidu.com/s"
strFormData = "wd=ibiancheng"
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或IP。

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/422.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言