I’m trying to make a simple app that will “ping” a uri and tell me if its responding or not
I have the following code but it only seems to check domains at the root level
ie http://www.google.com and not http://www.google.com/voice
private bool WebsiteUp(string path)
{
bool status = false;
try
{
Uri uri = new Uri(path);
WebRequest request = WebRequest.Create(uri);
request.Timeout = 3000;
WebResponse response;
response = request.GetResponse();
if (response.Headers != null)
{
status = true;
}
}
catch (Exception loi)
{
return false;
}
return status;
}
Is there any existing code out there that would better fit this need?
Edit: Actually, I tell a lie – by default 404 should cause a web exception anyway, and I’ve just confirmed this in case I was misremembering. While the code given in the example is leaky, it should still work. Puzzling, but I’ll leave this answer here for the better safety with the response object.
The problem with the code you have, is that while it is indeed checking the precise URI given, it considers 404, 500, 200 etc. as equally “successful”. It also is a bit wasteful in using GET to do a job HEAD suffices for. It should really clean up that WebResponse too. And the term
pathis a silly parameter name for something that isn’t just a path, while we’re at it.Of course there are poor websites out there that return a 200 all the time and so on, but this is the best one can do. It assumes that in the case of a redirect you care about the ultimate target of the redirect (do you finally end up on a successful page or an error page), but if you care about the specific URI you could turn off automatic redirect following, and consider 3xx codes successful too.