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

简介: 【解决方案 十】判断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来检测代码的执行效率。

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

相关文章
|
1月前
|
网络协议 开发工具 Android开发
应用研发平台EMAS产品常见问题之接入httpdns后 访问重定向的url访问有问题如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
2月前
feign发起url请求日期序列化问题
feign发起url请求日期序列化问题
41 0
|
3月前
Copy网页中F12里的请求url到postman,并且把所有参数都带过来
Copy网页中F12里的请求url到postman,并且把所有参数都带过来
29 0
|
4月前
|
Web App开发 JavaScript Java
教会你什么是Spring-Rest- url 请求风格
教会你什么是Spring-Rest- url 请求风格
50 0
|
1月前
|
JavaScript Windows
VUE部署到IIS中报404错误解决方案-配置URL重写
VUE部署到IIS中报404错误解决方案-配置URL重写
|
1月前
|
Web App开发 测试技术 Python
使用 Python 结合 Selenium 访问一个 url
使用 Python 结合 Selenium 访问一个 url
26 0
|
4月前
|
存储 NoSQL Redis
一个网站有很多页面url,做一个URL排行榜功能。排行根据url的访问次数pv排行
一个网站有很多页面url,做一个URL排行榜功能。排行根据url的访问次数pv排行
32 2
|
6月前
|
Web App开发 资源调度 开发者
SAP Fiori Elements 应用 OData 元数据请求 url 里的模型名称决定逻辑
SAP Fiori Elements 应用 OData 元数据请求 url 里的模型名称决定逻辑
49 0
|
6月前
|
存储 JavaScript 前端开发
SAP UI5 OData 请求 url 中的参数 sap-value-list=none
SAP UI5 OData 请求 url 中的参数 sap-value-list=none
31 0
|
6月前
|
前端开发 JavaScript
Spartacus base-url 访问 - CSR 端需要修改的配置
Spartacus base-url 访问 - CSR 端需要修改的配置
42 0