【解決方案 十】判斷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來檢測代碼的執行效率。

以上就是這個需求過程中的收穫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章