2013-07-30 123 views
1

我想这个代码..C# - HttpWebRequest的状态代码返回200,而不是404

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页面。

This is what i see当我在我的浏览器中输入goo4le.com。

有人能告诉我如何获得真正的http状态,而不是我的浏览器状态?

+0

我收到一个异常“远程名称无法解析:'www.goo4le.com'” – Nilesh

回答

1

我实际上没有得到任何状态码,当我运行这个时,我得到一个DNS错误,说我不能查找域。

我想你是完全正确的ISP,他们可能是通过DNS重定向做到这一点,因为你不会得到这个错误。您可以通过使用比你的ISP提供的另一个DNS服务器解决这个问题,尝试谷歌8.8.8.8,8.8.4.4(https://developers.google.com/speed/public-dns/

这从他们的常见问题

如何为谷歌公共DNS不同从我的ISP的DNS服务或其他 开放的DNS解析器?我怎么知道它是否更好?

打开解析器和 您的ISP都提供DNS解析服务。我们邀请您尝试 Google Public DNS作为您的主要或次要DNS解析器,以及 任何其他备用DNS服务。识别适用于您的DNS解析器时,需要考虑许多事项 ,如速度, 可靠性,安全性和响应的有效性。与Google Public DNS不同,某些ISP和开放式解析程序阻止,筛选或重定向DNS响应。

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

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

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

如果是工作,它很可能会抛出异常,因为它返回一个的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; 
} 
+0

您的代码返回200状态为goo4le.com :( – Giri

相关问题