我正在尝试此代码..
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状态而不是我的浏览器状态吗?
答案 0 :(得分:1)
我实际上在运行时没有得到任何状态代码,我收到DNS错误,说我无法查找域名。
我想你对ISP完全正确,他们可能会通过DNS重定向这样做,因为你没有得到这个错误。您可以使用除ISP之外的DNS服务器来解决此问题,请尝试使用googles 8.8.8.8,8.8.4.4(https://developers.google.com/speed/public-dns/)
来自他们的常见问题解答
Google Public DNS与我的ISP的DNS服务或其他服务有何不同 打开DNS解析器?我怎么知道它是否更好?
打开解析器和 您的ISP都提供DNS解析服务。我们邀请您试试 Google Public DNS作为您的主要或辅助DNS解析器 任何其他备用DNS服务。有很多事情需要考虑 在识别适合您的DNS解析器时,例如速度, 响应的可靠性,安全性和有效性。与Google Public不同 DNS,一些ISP和开放式解析器阻止,过滤或重定向DNS 响应。
Google Public DNS如何处理不存在的域名?
如果 您为不存在的域名发出查询,Google Public DNS始终根据DNS协议返回NXDOMAIN记录 标准。浏览器应将此响应显示为DNS错误。如果, 相反,您会收到除错误消息之外的任何响应(for 例如,您被重定向到另一个页面),这可能是结果 以下内容:客户端应用程序,如浏览器插件 正在显示不存在的域的备用页面。一些ISP 可能会截取并替换所有NXDOMAIN响应 通往自己的服务器。如果您担心您的ISP是 您应该拦截Google公共DNS请求或响应 联系您的ISP。
答案 1 :(得分: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;
}