定时检测网站运行状态

小编最近遇到了一个问题,网站发布之后,及时获取网站的运行状态
可以把一个网站的很多页面,或者说很多网站的基本信息,配置在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
    }
}

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值