如何检查网站是否在C#上线?

我希望我的程序在C#中检查一个网站在执行之前是否在线,我如何让我的程序ping网站并检查C#中的响应?

您已使用System.Net.NetworkInformation.Ping请参见下文。

 var ping = new System.Net.NetworkInformation.Ping(); var result = ping.Send("www.google.com"); if (result.Status != System.Net.NetworkInformation.IPStatus.Success) return; 

Ping只告诉您端口处于活动状态,它不会告诉您它是否真的是一个Web服务。

我的建议是对URL执行HTTP HEAD请求

 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("your url"); request.AllowAutoRedirect = false; // find out if this site is up and don't follow a redirector request.Method = "HEAD"; try { response = request.GetResponse(); // do something with response.Headers to find out information about the request } catch (WebException wex) { //set flag if there was a timeout or some other issues } 

这实际上不会获取HTML页面,但它可以帮助您找出您需要知道的最低限度。 对不起,如果代码没有编译,这只是我的头脑。

Digicoder代码的小注释和Ping方法的完整示例:

 private bool Ping(string url) { try { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Timeout = 3000; request.AllowAutoRedirect = false; // find out if this site is up and don't follow a redirector request.Method = "HEAD"; using (var response = request.GetResponse()) { return true; } } catch { return false; } } 
 if (!NetworkInterface.GetIsNetworkAvailable()) { // Network does not available. return; } Uri uri = new Uri("http://stackoverflow.com/any-uri"); Ping ping = new Ping(); PingReply pingReply = ping.Send(uri.Host); if (pingReply.Status != IPStatus.Success) { // Website does not available. return; } 

我能想到的最简单的方法是:

 WebClient webClient = new WebClient(); byte[] result = webClient.DownloadData("http://site.com/x.html"); 

如果网站不在线,DownloadData将抛出exception。

可能有类似的方式来ping网站,但除非你每秒检查多次,否则差异不大可能是明显的。