使用C#从网站下载文件

我想使用以下代码从网站下载文件:

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

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

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

如何使用C#代码下载?

我用wget测试了这个URL,得到了403错误。 我能够通过向标头添加用户代理字符串来解决该问题

尝试使用webClient.Headers.Add(HttpRequestHeader.UserAgent, "blah")向头部添加用户代理字符串

首先要注意的是,如果您在浏览器中尝试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是有问题的。 保存在其他地方。

您需要设置以下两个标头才能工作:

  • User-Agent:设置为一些标准的浏览器用户代理
  • 接受:设置为接受“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"); 
 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); } 

尝试类似的东西

 WebClient wc = new WebClient(); wc.Credentials = CredentialCache.DefaultCredentials;