【发布时间】:2011-05-26 13:44:15
【问题描述】:
我在我的 Windows 应用程序中使用 httpWebRequest 将文件从网络服务器 (sURL) 下载到本地文件夹 (fileDestination),如下所示:
Public Function DownloadFile(ByVal sURL As String, _
ByVal fileDestination As String, _
ByVal WebRequestType As String) As Boolean
Dim URLReq As HttpWebRequest
Dim URLRes As HttpWebResponse
Dim FileStreamer As FileStream
Dim bBuffer(999) As Byte
Dim iBytesRead As Integer
Dim folderDestination As String
Dim sChunks As Stream
Try
FileStreamer = New FileStream(fileDestination, FileMode.Create)
URLReq = WebRequest.Create(sURL)
URLRes = URLReq.GetResponse 'Error occurs here!!
sChunks = URLReq.GetResponse.GetResponseStream
DownloadProgressBar.Value = 0
DownloadProgressBar.Maximum = URLRes.ContentLength
Do
iBytesRead = sChunks.Read(bBuffer, 0, 1000)
FileStreamer.Write(bBuffer, 0, iBytesRead)
Loop Until iBytesRead = 0
sChunks.Close()
FileStreamer.Close()
URLRes.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
这适用于前几个文件。但随后它开始在URLReq.GetResponse 行上给出以下错误:
“操作已超时”
有人知道是什么原因造成的吗?
【问题讨论】:
-
崩溃时下载的文件有多大?
-
我注意到您将问题标记为 asp.net,这一切都是在 asp.net 网页中发生的,还是从 asp.net 网站请求的 Windows 应用程序?
-
@Urbycoz,问一个显而易见的问题,您是否可以使用常规网络浏览器下载您尝试访问的任何内容?此外,您尝试从您控制的服务器还是从第三方下载的内容是什么?如果是后者,某些网站(尤其是 Google)会检查用户代理标头以寻找机器人。尝试手动将请求的用户代理设置为一些常见的用户代理。
-
@Urbycoz,看看这个帖子,他说他需要添加一个
Request.Abort电话。 andrewdothay.net/blog/2007/07/25/… -
@Urbycoz,如果是这种情况,您也许可以设置
System.Net.ServicePointManager.DefaultConnectionLimit
标签: vb.net httpwebrequest download