httpwebrequest状态代码返回200而不是404

本文关键字:状态 代码 返回 httpwebrequest | 更新日期: 2023-09-27 18:25:39

我正在尝试这个代码。。

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状态而不是我的浏览器状态吗?

httpwebrequest状态代码返回200而不是404

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

我想你对ISP的看法是正确的,如果你没有得到这个错误,他们可能会通过DNS重定向来做到这一点。你可以使用ISP提供的DNS服务器以外的DNS服务器来解决这个问题,试试谷歌8.8.8.8、8.8.4.4(https://developers.google.com/speed/public-dns/)

这来自他们的常见问题

谷歌公共DNS与我的ISP的DNS服务或其他服务有何不同打开DNS解析程序?我如何判断它是否更好

打开解析器和您的ISP都提供DNS解析服务。我们邀请您尝试谷歌公共DNS作为您的主要或次要DNS解析程序任何其他备用DNS服务。有很多事情需要考虑当识别适用于您的DNS解析程序(例如速度)时,响应的可靠性、安全性和有效性。与Google Public不同DNS、一些ISP和开放解析程序阻止、过滤或重定向DNS响应。

谷歌公共DNS如何处理不存在的域

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

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

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;
}