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

相关文章
相关标签/搜索