开发者

How do you check if a website is online in C#?

I want my program in C# to check if a website is online prio开发者_如何学运维r to executing, how would I make my program ping the website and check for a response in C#?


A Ping only tells you the port is active, it does not tell you if it's really a web service there.

My suggestion is to perform a HTTP HEAD request against the URL

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
}

This will not actually fetch the HTML page, but it will help you find out the minimum of what you need to know. Sorry if the code doesn't compile, this is just off the top of my head.


You have use System.Net.NetworkInformation.Ping see below.

var ping = new System.Net.NetworkInformation.Ping();

var result = ping.Send("www.google.com");

if (result.Status != System.Net.NetworkInformation.IPStatus.Success)
    return;


Small remark for Digicoder's code and complete example of Ping method:

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;
}


The simplest way I can think of is something like:

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

DownloadData will throw an exception if the website is not online.

There is probably a similar way to just ping the site, but it's unlikely that the difference will be noticeable unless you are checking many times a second.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜