iOS 使用libcurl 獲取網絡請求各階段的時間

最近由於要作網絡檢測,因此開始調研如何在iOS下獲取請求的各項內容。好比首包時間、DNS解析時間、請求connect時間、SSL握手時間、下載速度、上傳速度等等網絡指標。這些數據若是是用iOS原生方法基本是無法獲取的,iOS 10能夠用系統的以下方法能夠獲取到這些信息:html

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
複製代碼

但若是iOS9及如下版本就不行了,這不行啊,只能繼續琢磨琢磨。 又由於手上有另外一個調研任務用到了libcurl,因此帶着試試的態度去查了下,沒想到,真的有辦法!ios

下面,請看主角curl_easy_getinfo這個函數,libcurl的官方介紹文檔是:https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html 裏面有詳細的介紹,你想獲取什麼參數就點進去看Example範例代碼,很簡單的都是。給個獲取DNS解析時間的範例,代碼來自官方Example:macos

curl = curl_easy_init();
if(curl) {
  double namelookup;
  curl_easy_setopt(curl, CURLOPT_URL, url);
  res = curl_easy_perform(curl);
  if([CURLE_OK](https://curl.haxx.se/libcurl/c/libcurl-errors.html#CURLEOK) == res) {
    res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup);
    if([CURLE_OK](https://curl.haxx.se/libcurl/c/libcurl-errors.html#CURLEOK) == res) {
      printf("Time: %.1f", namelookup);
    }
}
/* always cleanup */
curl_easy_cleanup(curl);

複製代碼

簡單吧,其他你想要獲取的網絡請求參數看官網範例吧,各種檢測SDK,例如聽雲、友盟會不會也是經過這樣獲取的呢? : )bash

相關文章
相關標籤/搜索