【解决方案 十】判断URL请求是否成功并检测访问效率

最近在做的一个需求是这样的:要求判断某一个URL是否能请求到资源,并且计算该URL的执行效率。从网上找了一些方法,最终确定通过如下的方式来实现。

判断某一个URL是否能请求到资源

首先通过如下代码来对URL请求资源的返回内容做判断:

        /// <summary>
        /// 检测url是否有效
        /// </summary>
        /// <param name="url">url</param>
        /// <returns></returns>
        public static bool CheckOutUrlStatus(string url)
        {
            var result = false;
            HttpWebRequest webRequst = null;        //HTTP请求
            HttpWebResponse webResponse = null;     //HTTP会话
            try
            {
                webRequst = (HttpWebRequest)WebRequest.Create(url); //创建http请求
                webRequst.Method = "HEAD";  //设置请求类型为HEAD,只请求头部信息
                webResponse = (HttpWebResponse)webRequst.GetResponse(); //获得http会话
                if (webResponse.StatusCode == HttpStatusCode.OK) //请求成功
                    result = true;
            }
            catch (Exception)
            {
            }
            finally
            {
                //关闭会话
                if (webResponse != null)
                    webResponse.Close();
            }
            return result;
        }

通过单元测试检测该接口的有效性

接口编写完毕后,通过两个不同的网址URL来监测接口是否符合要求:
在这里插入图片描述

检测HEAD请求和GET请求的性能

请求的方式有很多种,由于我们只需要获取是否访问能成功即可这样的结果,所以只需请求响应的头部信息即可。可以通过stopwatch函数来监测对应请求的访问性能。

        [TestMethod]
        public void TimeCheck()
        {
            var stopwatch = new Stopwatch();
            stopwatch.Start(); // 开始监视代码运行时间

            #region 要执行的代码体

            //需要监测的代码
            const int count = 1000; //循环执行请求次数
            var i = 0;
            const string url = "http://www.baidu.cn";

            while (i < count)
            {
                var resultRight = UrlHelper.CheckOutUrlStatus(url);
                i++;
            }

            #endregion 要执行的代码体

            stopwatch.Stop(); // 停止监视
            var timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间

            var hours = timespan.TotalHours.ToString("#0.00000000 "); // 总小时
            var minutes = timespan.TotalMinutes.ToString("#0.00000000 "); // 总分钟
            var seconds = timespan.TotalSeconds.ToString("#0.00000000 "); // 总秒数
            var milliseconds = timespan.TotalMilliseconds.ToString("#0.00000000 "); // 总毫秒数

            Console.WriteLine(milliseconds);
        }

通过单元测试对百度地址进行1000次请求,结果表现为,在HEAD请求状态下,共耗费时间4863毫秒,GET请求状态下,共耗费13554.95毫秒,大概是1:3的时间状态。

结论

通过以上内容的学习和分析,得出如下积累和输出:

  • URL接口请求可用以上代码(CheckOutUrlStatus)来确定资源访问结果。
  • 在同样的请求URL下,使用HEAD的效率高于GET,因为HEAD只请求了头部信息,检测的话最好用1000及以上次数,可以规避网络波动的影响
  • 可以用stopwatch来检测代码的执行效率。

以上就是这个需求过程中的收获。

发布了240 篇原创文章 · 获赞 114 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/sinat_33087001/article/details/95064539
今日推荐