我希望我的C#程序在执行之前能够检查一个网站是否在线,我应该如何让我的程序ping这个网站并且在C#中检查是否有响应?
我希望我的C#程序在执行之前能够检查一个网站是否在线,我应该如何让我的程序ping这个网站并且在C#中检查是否有响应?
一个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页面,但它将帮助您找出您需要知道的最小信息。如果代码无法编译,抱歉,这只是我脑海中的想法。
您需要使用 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;
对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将抛出异常。
可能有一种类似的方法只需ping网站,但是除非您每秒钟检查多次,否则不太可能注意到差异。