我有一个C#程序,直到一两天前还运行良好。我使用以下片段来抓取页面:
string strSiteListPath = @"http://www.ngs.noaa.gov/CORS/dates_sites.txt";
Uri uriSiteListPath = new Uri(strSiteListPath);
System.Net.WebClient oWebClient = new System.Net.WebClient();
strStationList = oWebClient.DownloadString(uriSiteListPath);
但它始终返回404 Not Found错误。该页面完全存在,欢迎您自己尝试。因为它在几天前就工作了,而且我的代码中没有任何变化,所以我认为网络服务器可能在某种程度上发生了变化。没关系,会发生的,但这里到底发生了什么?
为什么我可以手动浏览到文件,但DownloadString无法获取文件?
编辑:
为了完整起见,代码现在看起来像:
string strSiteListPath = @"http://www.ngs.noaa.gov/CORS/dates_sites.txt";
Uri uriSiteListPath = new Uri(strSiteListPath);
System.Net.WebClient oWebClient = new System.Net.WebClient();
oWebClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
strStationList = oWebClient.DownloadString(uriSiteListPath);
再次感谢,托马斯·莱维斯克!
显然,站点要求您有一个有效的User-Agent
标头。如果你把标题设置成这样:
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0
然后请求就可以正常工作了。