定时检测网站运行状态

来源:互联网 发布:精准扶贫大数据平台app 编辑:程序博客网 时间:2024/06/01 19:59

小编最近遇到了一个问题,网站发布之后,及时获取网站的运行状态
可以把一个网站的很多页面,或者说很多网站的基本信息,配置在XML中
通过,读取XML文件,定时的检测网站的运行状态,记录数据库日志,如果出现问题,第一时间邮件或者其他方式,通知网站维护人员

新建控制台应用程序
效果

这里写图片描述

后台代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Net;using System.Text.RegularExpressions;namespace ConsoleApplication1{    class Program    {        #region 主函数        public static void Main(string[] args)        {            // 获取输入要访问的网址            string url=null;                      Console.Write("请输入要访问的网址:");            url = Convert.ToString(Console.ReadLine());            // 验证网址的格式             bool result=judgeReg(url);            // 网址的格式            string urlFormat = "网址的格式正确。";            if (result==false)            {                urlFormat = "网址的格式不正确!";                Console.WriteLine(urlFormat);                Console.ReadKey();                return;            }            // 检测网站的状态            string status = judgeStatus(url);            // http的状态码            string errorCode = status.Substring(0, 3);            // 错误信息            string errorMessage = status.Substring(3);            // 错误详情            string detailsMessage = judegDetails(errorCode);            //输出            Console.WriteLine(urlFormat);            Console.WriteLine(errorCode);            Console.WriteLine(errorMessage);            Console.WriteLine(detailsMessage);            Console.ReadKey();        }        #endregion        #region 验证网址的格式        /// <summary>        /// 验证网址的格式        /// </summary>        /// <param name="url"></param>        /// <returns></returns>        public static bool judgeReg(string url)        {            bool result=false;            if (url != null && url != "")            {                var strRegex = @"^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&$%\$#\=~])*$";                Regex re=new Regex(strRegex);                 if (re.IsMatch(url)){                    result=true;                }            }            return result;        }        #endregion        #region 检测网页的状态        /// <summary>        /// 检测网页的状态        /// </summary>        /// <param name="url">网址URL</param>        /// <returns></returns>        public static string judgeStatus(string url)        {            // http的状态码,错误信息            int errorCode = 0;            string errorMessage = null;            try            {                WebRequest request = WebRequest.Create(url);                request.Method = "HEAD";                request.Timeout = 1000;                HttpWebResponse response = (HttpWebResponse)request.GetResponse();                //StatusCode为枚举类型,200为正常                //其他输出为异常,需要转为int型,才会输出状态码                errorCode = Convert.ToInt32(response.StatusCode);                errorMessage = response.StatusCode.ToString();                           response.Close();            }            catch (WebException ex)            {                if (ex.Response != null)                {                    errorCode = Convert.ToInt32(((HttpWebResponse)ex.Response).StatusCode);                    errorMessage = ((HttpWebResponse)ex.Response).StatusCode.ToString();                }                else                {                    errorCode = 000;                    errorMessage = "网站不存在!";                }            }            return errorCode + errorMessage;        }        #endregion        #region 检测网址的详细信息        /// <summary>        /// 检测网址的详细信息        /// </summary>        /// <param name="errorCode">错误代码</param>        /// <returns></returns>        public static string judegDetails(string errorCode)        {            // 错误详情            string detailMessage="";            int code=Convert.ToInt32(errorCode);            // 判断状态码            switch(code)            {                case 000:                    detailMessage="网址不存在。";                    break;                case 100:                    detailMessage = "继续,请求者应当继续提出请求。";                    break;                case 101:                    detailMessage = "切换协议,请求者已要求服务器切换协议,服务器已确认并准备进行切换。";                    break;                case 200:                    detailMessage = "成功,服务器已成功处理了请求。";                    break;                case 201:                    detailMessage = "已创建,请求成功且服务器已创建了新的资源。";                    break;                case 202:                    detailMessage = "已接受,服务器已接受了请求,但尚未对其进行处理。";                    break;                case 203:                    detailMessage = "非授权信息,服务器已成功处理了请求,但返回了可能来自另一来源的信息。";                    break;                case 204:                    detailMessage = "无内容,服务器成功处理了请求,但未返回任何内容。";                    break;                case 205:                    detailMessage = "重置内容,服务器成功处理了请求,但未返回任何内容。";                    break;                case 206:                    detailMessage = "部分内容,服务器成功处理了部分 GET 请求。";                    break;                case 300:                    detailMessage = "多种选择,服务器根据请求可执行多种操作。";                    break;                case 301:                    detailMessage = "永久移动,请求的网页已被永久移动到新位置。";                    break;                case 302:                    detailMessage = "临时移动,服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。";                    break;                case 303:                    detailMessage = "查看其他位置,当请求者应对不同的位置进行单独的 GET 请求以检索响应时,服务器会返回此代码。";                    break;                case 304:                    detailMessage = "未修改,自从上次请求后,请求的网页未被修改过。";                    break;                case 305:                    detailMessage = "使用代理,请求者只能使用代理访问请求的网页。";                    break;                case 307:                    detailMessage = "临时重定向,服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。";                    break;                case 400:                    detailMessage = "错误请求,服务器不理解请求的语法。";                    break;                case 401:                    detailMessage = "身份验证错误,此页要求授权。";                    break;                case 403:                    detailMessage = "禁止,服务器拒绝请求。";                    break;                case 404:                    detailMessage = "未找到,服务器找不到请求的网页。";                    break;                case 405:                    detailMessage = "方法禁用,禁用请求中指定的方法。";                    break;                case 406:                    detailMessage = "不接受,无法使用请求的内容特性响应请求的网页。";                    break;                case 407:                    detailMessage = "需要代理授权,指定请求者必须授权使用代理。";                    break;                case 408:                    detailMessage = "请求超时,服务器等候请求时发生超时。";                    break;                case 409:                    detailMessage = "冲突,服务器在完成请求时发生冲突。";                    break;                case 410:                    detailMessage = "已删除,请求的资源永久删除后,服务器返回此响应。";                    break;                case 411:                    detailMessage = "需要有效长度,服务器不接受不含有效内容长度标头字段的请求。";                    break;                case 412:                    detailMessage = "未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。";                    break;                case 413:                    detailMessage = "请求实体过大,服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。";                    break;                case 414:                    detailMessage = "请求的 URI 过长,请求的 URI(通常为网址)过长,服务器无法处理。";                    break;                case 415:                    detailMessage = "不支持的媒体类型,请求的格式不受请求页面的支持。";                    break;                case 416:                    detailMessage = "请求范围不符合要求,如果页面无法提供请求的范围,则服务器会返回此状态码。";                    break;                case 417:                    detailMessage = "未满足期望值,服务器未满足”期望”请求标头字段的要求。";                    break;                case 500:                    detailMessage = "服务器内部错误,服务器遇到错误,无法完成请求。";                    break;                case 501:                    detailMessage = "尚未实施,服务器不具备完成请求的功能。";                    break;                case 502:                    detailMessage = "错误网关,服务器作为网关或代理,从上游服务器收到无效响应。";                    break;                case 503:                    detailMessage = "服务不可用,服务器目前无法使用(由于超载或停机维护)。";                    break;                case 504:                    detailMessage = "网关超时,服务器作为网关或代理,但是没有及时从上游服务器收到请求。";                    break;                case 505:                    detailMessage = "HTTP 版本不受支持,服务器不支持请求中所用的 HTTP 协议版本。";                    break;                default:                    detailMessage = "网页不存在!";                    break;            }            return detailMessage;        }        #endregion    }}

这里,可以检测网站的地址是否正确,以及网站当前的运行状态

返回状态码和状态码的描述信息

原创粉丝点击