【问题标题】:DownloadString returns a 404 Error: Site needs a User-Agent HeaderDownloadString 返回 404 错误:站点需要用户代理标头
【发布时间】: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


【解决方案1】:

显然该网站要求您有一个有效的User-Agent 标头。如果您将该标题设置为类似的内容:

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0

那么请求就可以正常工作了。

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多