【发布时间】:2014-04-11 00:06:14
【问题描述】:
我有一个 C# 程序在一两天前运行良好。我使用下面的sn-p来抓取一个页面:
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);
再次感谢托马斯·莱维斯克!
【问题讨论】:
-
好吧,有问题的 url 为我返回 200 Ok,然后是 304 NotModified。您是否正在测试从桌面或部署应用程序的机器(如果不同)到该 url 的连接?应用程序和互联网之间是否有任何代理?确保您正在测试的 http 请求尽可能接近 .Net 正在执行的请求(相同的用户代理、接受等)
-
尝试运行 Fiddler 以查看原始请求/响应的样子 - 之后您应该了解更多。
-
我已经在 4 台不同的计算机上测试了这两个东西。没有代理。
-
请求返回 200 OK,但响应正文包含标题为“404 Error”的页面...
-
也许该网站试图阻止机器人并且只接受真正的浏览器用户代理编辑:宾果游戏!
标签: c# .net http-headers