2012-09-10 41 views
0

我有以下代碼,旨在檢查文件主機如rapidshare,extabit,turbobit ........等鏈接的可用性。我在下面寫的代碼總是返回HttpStatusCode「OK」,因爲鏈接實際上是有效的,但鏈接中的文件不可用或者沒有文件。有沒有辦法檢查我想要什麼,而不使用任何服務提供的任何api,我的意思是有沒有使用.Net的方式,可以讓我做我想做的事情?Winforms鏈接檢查器

private bool LinkChecker(string url) 
    { 
     string result = string.Empty; 
     Uri urlCheck = new Uri(url); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlCheck); 
     request.Timeout = 15000; 

     HttpWebResponse response = null; 
     try 
     { 
      response = (HttpWebResponse)request.GetResponse(); 
     } 
     catch (Exception err) 
     { 
      return false; 
     } 


     switch ((HttpStatusCode)response.StatusCode) 
     { 
      case HttpStatusCode.OK: 
       result = "Ok"; 
       break; 
      case HttpStatusCode.BadGateway: 
       result = "No Internet"; 
       break; 
      case HttpStatusCode.Forbidden: 
       result = "Link Not Found"; 
       break; 
      case HttpStatusCode.NotFound: 
       result = "Link Not Found"; 
       break; 
     } 

     if (result == "Ok") 
      return true; 
     else 
      return false; 
    } 

回答

2

這真的取決於主機。

一些主機使用正確的代碼返回HTTP響應,但根據我的經驗,其中大多數總是返回200 OK。即使頁面/文件未找到,許多網站始終返回200 OK。

一些託管返回HTTP重定向到一個「找不到文件」頁面上,這樣你就可以使用(新網址將包含文本「filenotfound」。

但我覺得最通用的方式去是尋找在響應人體中的某些文本。這意味着,以高概率你會尋找不同的文本爲每個主機供應商,但我真的沒有看到任何其他方式。

希望它可以幫助!:-)

+0

我會試着看看響應主體,我實際上檢查了響應標題而不是主體。謝謝。 – ykh

+0

你的方式實際上非常有用,有點慢,但其他方面100%正常工作。你只需要覆蓋所有的情況。非常感謝你。抱歉遲了迴應 :) – ykh