2013-07-30 136 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

相關問題