iOS网络数据指标收集
@interface MySessionDelegate : NSObject <NSURLSessionDelegate> @end @implementation MySessionDelegate
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics {
// 打印出请求的各项指标
for(NSURLSessionTaskTransactionMetrics *transaction in metrics.transactionMetrics) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)transaction.response;
NSLog(@"Request URL: %@", transaction.request.URL);
NSLog(@"HTTP Status Code: %ld", (long)response.statusCode);
NSLog(@"Request Start Time: %@", transaction.startDate);
NSLog(@"Request End Time: %@", transaction.endDate);
NSLog(@"Request Duration: %f", [transaction.duration doubleValue]);
NSLog(@"Bytes Sent: %lld", transaction.countOfRequestBodyBytesSent);
NSLog(@"Bytes Received: %lld", transaction.countOfResponseBodyBytesReceived);
NSLog(@"Redirection Count: %lu", (unsigned long)transaction.redirectCount);
NSLog(@"Request Method: %@", transaction.request.HTTPMethod);
}
} @end
@interface MyURLProtocol : NSURLProtocol @end @interface MyURLProtocol() @property(nonatomic, strong) NSURLConnection *connection;
@property(atomic, strong) NSMutableData *receivedData; @end @implementation MyURLProtocol + (BOOL)canInitWithRequest:(NSURLRequest *)request {
if ([NSURLProtocol propertyForKey:kCustomURLProtocolKey inRequest:request]) {
return NO;
} #if defined(Debug)
return YES;
#elif defined(Release)
return NO;
#endif
} + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
} - (void)startLoading {
NSMutableURLRequest *mutableRequest = [[self request] mutableCopy];
[NSURLProtocol setProperty:@YES forKey:kCustomURLProtocolKey inRequest:mutableRequest];
self.connection = [NSURLConnection connectionWithRequest:mutableRequest delegate:self];
} - (void)stopLoading {
[self.connection cancel];
self.connection = nil;
} #pragma mark - NSURLConnection Delegate #pragma mark - NSURLConnection Delegate
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[[self client] URLProtocol:self didReceiveResponse:response
cacheStoragePolicy:NSURLCacheStorageNotAllowed];
} - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[[self client] URLProtocol:self didLoadData:data]; if (self.receivedData == nil) {
self.receivedData = [[NSMutableData alloc] init];
} [self.receivedData appendData:data];
} -(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSURLRequest *logRequest = [self.request copy];
NSData *data = [self.receivedData copy];
[[self client] URLProtocolDidFinishLoading:self];
self.connection = nil;
#if defined(Debug)
dispatch_async(dispatch_get_main_queue(), ^{
[[LogManager sharedInstance] addNetworkLog:logRequest response:data];
});
#else
dispatch_async(dispatch_get_main_queue(), ^{
[[LogManager sharedInstance] addNetworkLog:logRequest response:data];
});
#endif } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[[self client] URLProtocol:self didFailWithError:error];
self.connection = nil;
} @end
iOS网络数据指标收集的更多相关文章
- ios 网络数据下载和JSON解析
ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ...
- 浅议iOS网络数据解析
/*------------------------------------ 数据解析: 1.JSON数据 --------------------------------*/ 重点:1.什么是JSO ...
- ios的网络数据下载和json解析
ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知 ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...
- iOS开发——网络使用技术OC篇&网络爬虫-使用正则表达式抓取网络数据
网络爬虫-使用正则表达式抓取网络数据 关于网络数据抓取不仅仅在iOS开发中有,其他开发中也有,也叫网络爬虫,大致分为两种方式实现 1:正则表达 2:利用其他语言的工具包:java/Python 先来看 ...
- iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
- ios网络学习------4 UIWebView的加载本地数据的三种方式
ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
- iOS - NetRequest 网络数据请求
1.网络请求 1.1 网络通讯三要素 1.IP 地址(主机名): 网络中设备的唯一标示.不易记忆,可以用主机名(域名). 1) IP V4: 0~255.0~255.0~255.0~255 ,共有 2 ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一 ...
随机推荐
- DVWA-XSS(DOM)
漏洞详解. DOM XSS(Cross-site scripting)是一种Web安全漏洞,它利用了浏览器的DOM(文档对象模型)解析机制,通过注入恶意代码来攻击用户. DOM XSS与传统的反射型或 ...
- Spark Catalyst 查询优化器原理
这里我们讲解一下SparkSQL的优化器系统Catalyst,Catalyst本质就是一个SQL查询的优化器,而且和 大多数当前的大数据SQL处理引擎设计基本相同(Impala.Presto.Hive ...
- 常用Linux系统命令、vim编辑命令汇总(看一遍用时候来查)
基本操作 pwd命令 作用:显示当前工作目录 用法:pwd cd命令 作用:改变目录位置 用法:cd [option] [dir] cd 目录路径 -进入指定目录 cd .. -返回父目录 cd / ...
- es6中clss做了些什么 怎么继承
我的理解是clss实际是一种语法糖 凡是es6中clss能做的 我们通过es5也同样可以完成传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性 ...
- 快速部署Ceph分布式高可用集群
快速部署Ceph分布式高可用集群 Ceph简介 Ceph是一个PB,EB级别的分布式存储系统,可以提供文件存储,对象存储.和块存储,它可靠性高,易扩展,管理简便,其中对象存储和块存储可以和其他云平台集 ...
- 在k8s(kubernetes) 上安装 ingress V1.1.0
Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由.流量路由由 Ingress 资源上定义的规则控制. 下面是一个将所有流量都发送到同一 Service 的简单 Ingre ...
- post-css/less/sass样式嵌套与命令之"&"符号—BEM
看了< less 的 & 详解 https://www.jianshu.com/p/127b0974cfc3>,对于此文再做一别补充 常见用法: 直接嵌套写法 .a{ colo ...
- HTTP.sys漏洞的检测和修复(附补丁包下载)
关于这个 HTTP.sys 漏洞,查了一些资料,没有一个写的比较全的,下面我来整理下. 这个漏洞主要存在Windows+IIS的环境下,任何安装了微软IIS 6.0以上的Windows Server ...
- day06 循环和数据类型的内置方法
循环加数据类型的内置方法 while 循环 for循环 range关键字 数据类型的内置方法 字符串的内置方法 while循环 while + continue #打印0-10的数字不打印6 n=0 ...
- C# System.ObjectDisposedException: Cannot access a disposed object, A common cause of thiserror is disposing a context that was resolved from dependency injection and then later trying touse...
项目中使用了依赖注入,这个错误在我项目中的原因:在async修饰的异步方法中,调用执行数据库操作的方法时,没有使用await关键字调用,因为没有等待该调用,所以在调用完成之前将继续执行该方法.因此,已 ...