博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSURLProtocol资料
阅读量:6332 次
发布时间:2019-06-22

本文共 1787 字,大约阅读时间需要 5 分钟。

  hot3.png

 它是一个抽象类,为载入URL的data的一些特定协议提供基础的结构。要实现它里面的函数就必须继承它。

    而NSURLProtocol其中有个成员就是NSURLProtocolClient的一个实例。因为NSURLProtocol是由一系列的回调函数构成的(注册函数除外),而要对URL的data进行各种操作时就到了调用NSURLProtocolClient实例的时候了,这就实现了一个钩子,去操作URL data。

NSURLProtocol有以下一系列的回调方法:

 

- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id )client;

+ (BOOL)canInitWithRequest:(NSURLRequest *)request;

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request;

- (void)startLoading;

- (void)stopLoading;

   其中canInitWithRequest是询问是否处理该请求的回调,如果不处理则后面所有函数都不会再调用。startLoading和stopLoading是分别对于loading开始从网页上抓取数据,从网页上抓取完数据的回调。其中startLoading称为我们可以重点利用的函数。

  NSURLProtocolClient主要有以下方法:

 

- (void)URLProtocol:(NSURLProtocol *)protocol wasRedirectedToRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse;

 

- (void)URLProtocol:(NSURLProtocol *)protocol cachedResponseIsValid:(NSCachedURLResponse *)cachedResponse;

 

- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveResponse:(NSURLResponse *)response cacheStoragePolicy:(NSURLCacheStoragePolicy)policy;

 

- (void)URLProtocol:(NSURLProtocol *)protocol didLoadData:(NSData *)data;

 

- (void)URLProtocolDidFinishLoading:(NSURLProtocol *)protocol;

 

- (void)URLProtocol:(NSURLProtocol *)protocol didFailWithError:(NSError *)error;

 

- (void)URLProtocol:(NSURLProtocol *)protocol didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

 

- (void)URLProtocol:(NSURLProtocol *)protocol didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

 

   其中wasRedirectedToRequest是重定向函数,
cachedResponseIsValid是对cached的操作,
didReceiveResponse是受到Response时的调用处理函数,
 didLoadData是load完数据时的调用,而后面的大致也与函数题目意思一样。而这些函数有个好处就是通通只需要我们调用它,系统就会做对应的事情,重载它也可以,不过一般不用这么麻烦。

转载于:https://my.oschina.net/DCode/blog/395653

你可能感兴趣的文章
[转载]推荐一个被大家忽视的微软的反跨站脚本库Anti-XSS V3.1
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
LINQ学习笔记(8) 标准查询运算符(下)
查看>>
atmega8 IO驱动能力
查看>>
[NOIP 2014复习]第三章:动态规划——NOIP历届真题回想
查看>>
ASP.NET MVC对WebAPI接口操作(添加,更新和删除)
查看>>
php上传文件大小限制
查看>>
查找是否已安装命令
查看>>
shell 题
查看>>
内核线程与用户线程的一点小总结 《程序员的自我修养》·笔记
查看>>
Mongodb 的学习
查看>>
《Discuz安装时候出现乱码 -- 问题解决方法》
查看>>
iOS中打包.a静态库
查看>>
curl_setopt — 设置 cURL 传输选项
查看>>
CefSharp的引用、配置、实例
查看>>
Hadoop生态圈-Azkaban部署实战
查看>>
使用redis-cli --pipe快速插入数据
查看>>
Alibaba Cloud Toolkit for Eclipse & ECS、EDAS 或容器服务 Kubernetes
查看>>
API设计中token的思路
查看>>
Repeater\DataList\GridView实现分页,数据编辑与删除
查看>>