如何使用HttpWebRequest下载文件

时间:2011-07-21 14:51:51

标签: vb.net webforms httpwebrequest browser

尝试在代码中下载文件。

当前代码:

  Dim uri As New UriBuilder
    uri.UserName = "xxx"
    uri.Password = "xxx"
    uri.Host = "xxx"
    uri.Path = "xxx.aspx?q=65"

   Dim request As HttpWebRequest = DirectCast(WebRequest.Create(uri.Uri), HttpWebRequest)

    request.AllowAutoRedirect = True

    request = DirectCast(WebRequest.Create(DownloadUrlIn), HttpWebRequest)
    request.Timeout = 10000
    'request.AllowWriteStreamBuffering = True

    Dim response As HttpWebResponse = Nothing
    response = DirectCast(request.GetResponse(), HttpWebResponse)
    Dim s As Stream = response.GetResponseStream()

    'Write to disk
    Dim fs As New FileStream("c:\xxx.pdf", FileMode.Create)

    Dim read As Byte() = New Byte(255) {}
    Dim count As Integer = s.Read(read, 0, read.Length)
    While count > 0
        fs.Write(read, 0, count)
        count = s.Read(read, 0, read.Length)
    End While

    'Close everything
    fs.Close()
    s.Close()
    response.Close()

运行此代码并检查response.ResponseUri表示我被重定向回登录页面而不是pdf文件。

由于某些原因,它没有授权访问我在uri中发送用户名和密码时可能会丢失的内容?谢谢你的帮助

3 个答案:

答案 0 :(得分:4)

您不需要所有代码来从网上下载文件 只需使用WebClient类及其DownloadFile方法

即可

答案 1 :(得分:0)

您应该检查并查看该网站是否需要cookie(大部分都是),我会使用数据包分析器并运行您的代码并确切了解服务器返回的内容。使用fiddler或http分析器记录数据包

答案 2 :(得分:0)

使用UWP,由于UWP没有4.5,这已成为一个更相关的问题。这个问题的正确答案是,如果您被重定向到登录页面,那么您的凭据或WebClient的设置(或缺少)标题必定存在问题。

根据Microsoft,下载请求通过HttpWebRequest上的GetResponse()调用发送,因此下载的文件应该在响应中的流中(由HttpWebRequest上面提到的电话。)