使用C#从网站下载文件

时间:2011-03-08 05:10:12

标签: c# .net

我正在尝试使用以下代码从网站下载文件:

WebClient webClient = new WebClient();
webClient.DownloadFile("http://www.nseindia.com/content/historical/EQUITIES/2011/MAR/cm07MAR2011bhav.csv.zip", @"c:\myfile.txt");

显示的例外是“禁止错误403”

这意味着找不到页面,但我可以使用java代码下载该文件,也可以直接从该网站下载。

如何使用C#代码下载?

5 个答案:

答案 0 :(得分:6)

首先要注意的是,如果您在浏览器中尝试使用该URL,则会下载该文件。这告诉你的是,你需要配置WebClient来发送模仿网站期望浏览器做什么的标题。这对我有用:

        var wc = new WebClient();
        var ua = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
        wc.Headers.Add(HttpRequestHeader.UserAgent, ua);
        wc.Headers["Accept"] = "/";
        wc.DownloadFile("http://www.nseindia.com/content/historical/EQUITIES/2011/MAR/cm07MAR2011bhav.csv.zip", @"d:\myfile.txt");

另外,保存到C:root是有问题的。保存在其他地方。

答案 1 :(得分:2)

您需要设置以下两个标题才能生效:

  • 用户代理:设置为一些标准浏览器用户代理
  • 接受设置为接受“application / zip”

示例(已测试):

WebClient webClient = new WebClient();
webClient.Headers.Add("Accept", "application/zip");
webClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
webClient.DownloadFile("http://www.nseindia.com/content/historical/EQUITIES/2011/MAR/cm07MAR2011bhav.csv.zip", @"D:\test\test.zip");

答案 2 :(得分:2)

我用wget测试了这个URL,得到了403错误。我能够通过向标题

添加用户代理字符串来解决该问题

尝试使用webClient.Headers.Add(HttpRequestHeader.UserAgent, "blah")

向标头添加用户代理字符串

答案 3 :(得分:0)

using (WebClient wc = new WebClient())
{
  wc.Headers.Add("Referer:https://www.nseindia.com/products/content/equities/equities/archieve_eq.htm");
  wc.Headers.Add("User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
  wc.DownloadFile(url, fileName);
}

答案 4 :(得分:-2)

尝试类似

的内容
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;