2

我正在尝试这段代码..

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.goo4le.com/");
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
  Console.Write((int)response.StatusCode);
}

goo4le 是一个不存在的域。所以它应该返回 404。相反,它返回 200 状态。

我认为这是因为我的宽带提供商使用了自定义 404 页面。

这是我在浏览器中输入 goo4le.com 时看到的内容。

有人可以告诉我如何获取真正的 http 状态而不是我的浏览器状态吗?

4

2 回答 2

1

运行它时我实际上没有得到任何状态代码,我收到一个 DNS 错误,说我无法查找域。

我想您对 ISP 的看法是完全正确的,如果您没有收到此错误,他们可能是通过 DNS 重定向来执行此操作的。您可以通过使用您的 ISP 提供的 DNS 服务器以外的 DNS 服务器来解决此问题,请尝试使用 googles 8.8.8.8、8.8.4.4 ( https://developers.google.com/speed/public-dns/ )

这来自他们的常见问题解答

Google 公共 DNS 与我的 ISP 的 DNS 服务或其他开放式 DNS 解析器有何不同?我怎么知道它是否更好?

开放解析器和您的 ISP 都提供 DNS 解析服务。我们邀请您尝试使用 Google 公共 DNS 作为您的主要或辅助 DNS 解析器以及任何其他备用 DNS 服务。在确定适合您的 DNS 解析器时,有很多事情需要考虑,例如速度、可靠性、安全性和响应的有效性。与 Google 公共 DNS 不同,一些 ISP 和开放解析器会阻止、过滤或重定向 DNS 响应。

Google 公共 DNS 如何处理不存在的域?

如果您对不存在的域名发出查询,Google 公共 DNS 将始终根据 DNS 协议标准返回 NXDOMAIN 记录。浏览器应将此响应显示为 DNS 错误。相反,如果您收到除错误消息以外的任何响应(例如,您被重定向到另一个页面),这可能是以下原因造成的: 客户端应用程序(例如浏览器插件)正在显示替代一个不存在的域的页面。一些 ISP 可能会拦截所有 NXDOMAIN 响应并将其替换为通向其自己服务器的响应。如果您担心您的 ISP 正在拦截 Google 公共 DNS 请求或响应,您应该联系您的 ISP。

于 2013-07-30T10:46:05.217 回答
0

您可以尝试禁用重定向,不幸的是我无法测试它,因为我有另一个提供商(如果这是问题的话)。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.goo4le.com/");
request.Method = "HEAD";
request.AllowAutoRedirect = false;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
  Console.Write((int)response.StatusCode);
}

如果它正在工作,它很可能会抛出一个异常,因为所有返回不是 200 的状态码的东西都会抛出一个......如果你想抓住它,试试这个:

try
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.goo4le.com/");
    request.Method = "HEAD";
    request.AllowAutoRedirect = false;
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
  Console.Write((int)response.StatusCode);
}

}
catch (WebException e)
{
   // in this case it was a status code exception (not status 200...)
   if (e.Response != null) Console.Write((int)e.Response.StatusCode);
   else throw;
}
于 2013-07-30T10:54:11.987 回答