我正在尝试使用以下代码从网站下载文件:
WebClient webClient = new WebClient();
webClient.DownloadFile("http://www.nseindia.com/content/historical/EQUITIES/2011/MAR/cm07MAR2011bhav.csv.zip", @"c:\myfile.txt");
显示的例外是“禁止错误403”
这意味着找不到页面,但我可以使用java代码下载该文件,也可以直接从该网站下载。
如何使用C#代码下载?
答案 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)
您需要设置以下两个标题才能生效:
示例(已测试):
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;