每天监测网站是否正常运行,之前是一个一个打开,现在写一个程序来监测。
步骤1.将文件配成XML格式方便读写,相对于数据库来说已操作。
XmlDocument dom = new XmlDocument();
dom.Load(@"D:\ServerList.xml");
foreach (XmlElement ServerC in dom.DocumentElement.ChildNodes)
{
string ID = ServerC.SelectSingleNode("ID").InnerText;
string Name = ServerC.SelectSingleNode("Name").InnerText;
string IP = ServerC.SelectSingleNode("IP").InnerText;
}
文件xml格式:其中encoding=”GB2312”,GB2312是一种可以识别中文的编码方式,不然会报如下错误
下图是正确的xml格式
步骤2:通过IP字段做为url去请求HttpWebRequest,查看返回的网站状态HttpStatusCode(此为枚举类型)。
字段名 | 说明 |
---|---|
Continue | 指示客户端可能继续其请求。 |
OK | 指示请求成功,且请求的信息包含在响应中。 这是最常接收的状态代码。 |
Created | 指示请求导致在响应被发送前创建新资源 |
Accepted | 指示请求已被接受做进一步处理 |
UseProxy | 指示请求应使用位于 Location 头中指定的URI 的代理服务器 |
BadRequest | 如果没有其他适用的错误,或者不知道准确的错误或错误没有自己的错误代码,则发送 |
此外还要很多的状态码,请查阅优快云
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK)
{
resp.Close();
return "程序运行中......";
}
}
catch (WebException e)
{
return e.ToString() ;
}
return "程序已终止";
在运行时会出现如下错误代码:401
在网上找了一下解决方案,原因是:请求第一个IP是本地IP,需要用户认证才能登录。解决方法如下,将用户电脑登录名和密码,赋值给NetworkCredential。
NetworkCredential d = new NetworkCredential("USERNAME", "password");// USERNAME电脑登录名,password登录密码
req.Credentials = d;
完整代码如下:
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument dom = new XmlDocument();
dom.Load(@"D:\ServerList.xml");
foreach (XmlElement ServerC in dom.DocumentElement.ChildNodes)
{
string ID = ServerC.SelectSingleNode("ID").InnerText;
string Name = ServerC.SelectSingleNode("Name").InnerText;
string IP = ServerC.SelectSingleNode("IP").InnerText;
HttpContext.Current.Response.Write(ID + "、<a href=" + IP + " target='_blank'>" + Name + "</a>" + "|" + CheckUrlVisit(ServerC.SelectSingleNode("IP").InnerText) + " <br>");
}
}
public string CheckUrlVisit(string url)
{
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
NetworkCredential d = new NetworkCredential("USERNAME", "password");//远程服务器返回错误 (401) 未经授权
req.Credentials = d;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK)
{
resp.Close();
return "程序运行中......";
}
}
catch (WebException e)
{
return e.ToString();
}
return "程序已终止";
}
运行结果如下: