下载需要使用vb.net/c#进行身份验证的文件?

时间:2009-11-19 16:56:00

标签: c# vb.net

类似于可以从http://download.finance.yahoo.com/d/quotes.csv?s=RHT下载的CSV文件。如何下载需要身份验证的文件?

我可以简单地使用

My.Computer.Network.DownloadFile("http://download.finance.yahoo.com/d/quotes.csv?s=RHT,MSFT,NOVL&f=sl1c1d1&e=.csv", "h:\s.csv")

下载公开发布的文件。我尝试按照MSDN documentation设置用户名和密码,但我得到的只是登录页面的HTML内容。

3 个答案:

答案 0 :(得分:2)

如果网站使用基于Cookie的身份验证,您需要将登录详细信息发布到服务器,收集Cookie,然后根据文件请求传递它们。

这并不像听起来那么容易......

这里有一个例子

http://blogs.msdn.com/dgorti/archive/2005/08/16/452347.aspx

菲尔

答案 1 :(得分:2)

这完全取决于您在HTTP请求中提供用户名/密码时网站是否会解释您的用户名/密码。有些网站/协议会,有些则不会。

这是一篇文章,展示了如何使用WebRequest类下载。

Downloading Files with the WebRequest and WebResponse Classes

除了本文之外,您还需要将您的用户名/密码添加到WebRequest。你可以这样做:

// Create a request for the specified remote file name
WebRequest request = WebRequest.Create(remoteFilename);
if (request != null)
{
    string username = "your username";
    string password = "your password";
    request.Credentials = new System.Net.NetworkCredential(username, password);
    ...
}

不幸的是,如果使用此方法不起作用,那么雅虎的财务页面不允许自动提供用户名/密码,并且您必须以“老式方式”登录才能下载您的文件。

答案 2 :(得分:1)

听起来您使用的网站正在使用表单身份验证。除非您有权访问使用域认证的版本,否则您可能需要在拥有CookieContainer时使用HttpWebRequest和假的POST请求,以便您可以保留令牌。然后,您就可以在get请求中包含该令牌以下载CSV文件。