最近由於要作網絡檢測,因此開始調研如何在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