最近因為要做網路檢測,所以開始調研如何在iOS下獲取請求的各項內容。比如首包時間、DNS解析時間、請求connect時間、SSL握手時間、下載速度、上傳速度等等網路指標。這些資料如果是用iOS原生方法基本是沒法獲取的,iOS 10可以用系統的如下方法可以獲取到這些資訊:
- (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,所以帶著試試的態度去查了下,沒想到,真的有辦法!
下面,請看主角curl_easy_getinfo
這個函式,libcurl的官方介紹文件是:https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
裡面有詳細的介紹,你想獲取什麼引數就點進去看Example範例程式碼,很簡單的都是。給個獲取DNS解析時間的範例,程式碼來自官方Example:
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,例如聽雲、友盟會不會也是通過這樣獲取的呢? : )