2013-03-21 24 views
1

我試圖編寫一個重定向檢查器,我今天早上的解決方案只是在一起,所以它不是最有效的,但它做了一切我需要它做的除了一件事:C# - HttpWebResponse重定向檢查器

它只在停止之前檢查兩個站點,沒有發生錯誤,它只停留在「request.GetResponse()作爲HttpWebResponse;」行第三頁。

我試過使用不同的網站和更改頁面的組合來檢查,但它只檢查兩個。

任何想法?

 string URLs = "/htmldom/default.asp/htmldom/dom_intro.asp/htmldom/dom_examples2.asp/xpath/default.asp"; 
     string sURL = "http://www.w3schools.com/"; 
     string[] u = Regex.Split(URLs, ".asp"); 

     foreach (String site in u) 
     { 
      String superURL = sURL + site + ".asp"; 

      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(superURL); 

      request.Method = "HEAD"; 
      request.AllowAutoRedirect = false; 

      var response = request.GetResponse() as HttpWebResponse; 
      String a = response.GetResponseHeader("Location"); 

      Console.WriteLine("Site: " + site + "\nResponse Type: " + response.StatusCode + "\nRedirect page" + a + "\n\n"); 
     } 

回答

5

除了事實,這將打破,如果WebException被丟進,我認爲它只是停止的原因是,你永遠不會丟棄你的反應。如果您有多個網址實際上由同一個網站提供服務,那麼他們會使用連接池 - 並且通過不處理響應,您不會釋放連接。您應該使用:

using (var response = request.GetResponse()) 
{ 
    var httpResponse = (HttpWebResponse) response; 
    // Use httpResponse here 
} 

請注意,我不是鑄造用as這裏 - 如果響應不是HttpWebResponse,該線路上的InvalidCastException比下一行一個NullReferenceException更多的信息。 ..

+0

感謝喬恩,在加入了一些錯誤處理代碼之後,你的解決方案非常完美 – ShaneC 2013-03-21 11:33:09