最近由于要作网络检测,因此开始调研如何在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