VB通过API函数如何实现HTTP断点续传下载?

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:00:22
这是我使用的下载函数,如何添加断点续传功能?还有如何获得远程文件大小?
Public Function DownloadFile(ByVal surl As String, ByVal strFile As String) As Long
Dim s As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim intFH As Integer

Dim sReadBuffer() As Byte
Dim lNumberOfBytesRead As Long

Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const scUserAgent = "VB OpenUrl"
Const INTERNET_FLAG_RELOAD = &H80000000
frmDownLoad.lblCount.Caption = "正在连接服务器..."
frmDownLoad.lblCount.Refresh
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, surl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
lCount = 0

If hOpen <> 0 And hOpenUrl <> 0 Th

获得 http 标头信息,就可以得到文件的大小
发送标头信息 可以设置 断点续传的 起点

具体的 我忘了 很久以前 弄过! 下载 小于2G的文件 速度 很快,不过超过 2G的文件 vb 处理起来需要 字节转换,很麻烦切很容易内存崩溃!

断点续传 最好使用 Winsock 控件 或者直接使用 Winsock 模块(个人感觉使用 模块要好一些,比较稳定)

举个例子:

发送请求下载信息

strTmp="GET 文件网络地址 HTTP/1.1" 回车
StrTmp=strTmp + "Accept: */*" 回车
StrTmp=StrTmp + "Host:主机地址"回测
StrTmp=StrTmp +"Range bytes=续传的起始点-" 回车 如果不加这句话 服务器回返回文件大小

简单的就是这样 不过 这是我印象中的,不过这个定义比较严格 你可以去网上在搜搜!