文件下载问题

rainbowsoftware 2008-06-07 01:50:24
我写了下面一个下载文集的类可有两个问题一直没有解决
一、文件的大小老不对 二、文件不能完整地下载我用的测试地址是 http://wttele2.skycn.com/down/Behead.zip
发现长度GetSize老是等于7233
请高手指教 下面是这个类的代码


Imports System.net
Imports System.IO
Public Class clsHTTP
Dim url As String
Dim lngSize As Long
Dim htpRequest As HttpWebRequest
Dim htpResponse As HttpWebResponse

Sub New(ByVal strurl As String)
url = strurl
Connect()
End Sub
Sub Connect()
Try
htpRequest = HttpWebRequest.Create(url)
htpRequest.Timeout = 3000
htpResponse = htpRequest.GetResponse
Catch ex As Exception
Return
End Try
End Sub
Function GetSize() As Long
Try
eturn htpResponse.ContentLength
Catch ex As Exception
Return 0
End Try
End Function
Sub DonwLoad(ByVal path As String)
'If File.Exists(path) Then
Dim strmFile As New FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
'End If
Dim strm As Stream = htpResponse.GetResponseStream
Dim strmSize As Integer
Dim offset As Integer = 1048576 '= Me.GetSize
Dim strmByte(1024) As Byte
strmSize = strm.Read(strmByte, 0, strmByte.Length)
While strmSize > 0
strmFile.Write(strmByte, 0, strmSize)
strmSize = strm.Read(strmByte, 0, strmByte.Length)
End While
End Sub
End Class
...全文
106 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainbowsoftware 2008-06-11
  • 打赏
  • 举报
回复
怎样分析出引用页?请进一步指导。
rainbowsoftware 2008-06-10
  • 打赏
  • 举报
回复
你有这方面的详细资料吗
只在此山中 2008-06-10
  • 打赏
  • 举报
回复
这个比较困难,主要是E文要好,多看msdn,呵呵
我觉得重要的是明白处理流程,www.skycn.com等站点为了防盗链,下载都要提供引用页.所以
1 判断下载的结果,例如查找结果htm文件中包含".htm"的字符串,找到后提取出来看是否是正确的网页链接,
是则增加为引用页再次下载.
2 如地址http://wttele2.skycn.com/down/Behead.zzz提取不到引用页,把最后的文件换为默认的站点主页名,如
http://wttele2.skycn.com/down/index.html
http://wttele2.skycn.com/down/default.html
http://wttele2.skycn.com/down/index.asp
http://wttele2.skycn.com/down/index.aspx
http://wttele2.skycn.com/down/default.aspx
等等做为引用页,再次下载.




rainbowsoftware 2008-06-10
  • 打赏
  • 举报
回复
webclinet 在下载时,给了个地址,就行了,能知道它是怎样下载的,就好了
只在此山中 2008-06-10
  • 打赏
  • 举报
回复
感觉http方式下载确实需要增加断点续传的功能.
只在此山中 2008-06-10
  • 打赏
  • 举报
回复
解析下载回来的文件,如果是一个HTM页,从中分析出引用页,
然后设置htpRequest.Referer="引用页",再次请求下载就行了.
rainbowsoftware 2008-06-10
  • 打赏
  • 举报
回复
zdbb 你好,请问,对于你所说的两种情况,我应怎样处理以实现正确连接呢?
CathySun118 2008-06-09
  • 打赏
  • 举报
回复
你可能你以前下载的方法超时了。你应该增加断点续传的功能
只在此山中 2008-06-09
  • 打赏
  • 举报
回复
我在这句
htpRequest.Timeout = 3000
后加上下句
htpRequest.Referer = "http://www.skycn.com/index.html"
就得到了正确的文件大小.
只在此山中 2008-06-09
  • 打赏
  • 举报
回复
讯雷信息:

文件名称: Behead.zip
文件大小: 377.72KB
文件类型: WinRAR ZIP 压缩文件
位置: C:\Downloads\
URL: http://wttele2.skycn.com/down/Behead.zip
引用页: http://www.google.cn/search?hl=zh-CN&q=http%3A%2F%2Fwttele2.skycn.com%2Fdown%2FBehead.zip+&meta=&aq=f
任务创建时间: 2008-6-6 17:14:29
任务完成时间: 2008-6-6 17:14:36
下载用时: 00:00:03
平均速度: 125.91KB/s
注释:
任务说明: 未从原始地址获得数据

结合上面信息看下面:
Q.下载工具无法下载或者下载不对,使用浏览器可以下载为何?
A.有一些站点只允许通过浏览器下载,所以请在设置“选项/协议”中设置 用户代理为“Internet Explore 5.x”可以冒充IE5.x.另外有点站点还有一种限制必须通过特定的引用页,请在下载任务的属性中引用页字段添入从哪下载的页面连接,比如从http://www.flashget.com/download.htm下载软件, 引用页属性添http://www.flashget.com/download.htm,还有一种很特殊的情况,如果发送引用页就无法正确下载,可以在“选项/协议”中去掉发送引用页的选项。
rainbowsoftware 2008-06-09
  • 打赏
  • 举报
回复
那请问怎样分析呀,我是第一次写这方面的程序,箐进一步指教。
只在此山中 2008-06-09
  • 打赏
  • 举报
回复
问题应该在于"引用页" ,下载下来的7233大小的是一个htm引用文件,不是zip文件.

迅雷比较智能,如果下载回来的是一个HTM页,貌似会自动从中分析出引用页并重新提交请求.

如果是这样,那你直接使用WINSOCK控件自己构造一个HTTP请求来下载文件就行了.

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧