2011-04-15 55 views
2

我試圖做一個函數來檢查一個網站是否在線,但是有一些超時問題。我想將其限制爲最多3秒,如果3秒內沒有響應,我應該將該頁面視爲離線。檢查網站是否在線,限制超時

我嘗試:

class OnlineCheck 
    { 
     public static bool IsOnline(string url) 
     { 
      try 
      { 
       WebClient webclient = new WebClient(); 
       webclient.Headers.Add(HttpRequestHeader.KeepAlive, "1000"); 

       webclient.OpenRead(url); 
      } 
      catch { return false; } 

      return true; 
     } 
    } 

回答

5

Web客戶端不支持暫停。但是你可以使用HttpWebRequest!

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Endpoint); 
request.Timeout=3000; 
request.GetResponse(); 
0

使用HttpWebRequest而不是WebClient。 HttpWebRequest類具有超時屬性。

6

如果您想檢查網站是否在線,您對網頁的內容並不感興趣,只是您會收到回覆。爲了提高效率,你只能請求http頭文件。這裏是你如何可以做一個簡單的例子:

private static IEnumerable<HttpStatusCode> onlineStatusCodes = new[] 
{ 
    HttpStatusCode.Accepted, 
    HttpStatusCode.Found, 
    HttpStatusCode.OK, 
    // add more codes as needed 
}; 

private static bool IsSiteOnline(string url, int timeout) 
{ 
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 
    { 
     if (request != null) 
     { 
      request.Method = "HEAD"; // get headers only 
      request.Timeout = timeout; 
      using (var response = request.GetResponse() as HttpWebResponse) 
      { 
       return response != null && onlineStatusCodes.Contains(response.StatusCode); 
      } 
     } 
    } 
    return false; 
} 
0

你可以試試這個代碼:

 System.Net.WebRequest r = System.Net.WebRequest.Create("http://www.google.com"); 
     r.Timeout = 3000; 

     System.Net.WebProxy proxy = new System.Net.WebProxy("<proxy address>"); 
     System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(); 

     credentials.Domain = "<domain>"; 
     credentials.UserName = "<login>"; 
     credentials.Password = "<pass>"; 

     proxy.Credentials = credentials; 
     r.Proxy = proxy; 

     try 
     { 
      System.Net.WebResponse rsp = r.GetResponse(); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Is not avaliable"); 
      return; 
     } 

     MessageBox.Show("Avaliable!"); 
0
static bool isOnline (string URL) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 
    request.Timeout = 3000; 

    try 
    { 
     WebResponse resp = request.GetResponse(); 
    } 
    catch (WebException e) 
    { 
     if (((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.NotFound) 
     { 
      return false; 
     } 
    } 

    return true; 
}