iOS 使用libcurl 获取网络请求各阶段的时间

最近因为要做网络检测,所以开始调研如何在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,例如听云、友盟会不会也是通过这样获取的呢? : )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值