NSURLProtocol的使用

5 篇文章 0 订阅
1 篇文章 0 订阅

在实际工作的项目中,有时会需要在webview的请求中添加认证,比如iOS中UIWebview添加headers认证请求;

  1. 一般的情况下我们可以在请求的时候直接添加headers,创建 NSMutableURLRequest 然后添加header [request setValue:@"header" forHTTPHeaderField: @"key"],这样可以最简单的添加header,用户在第一次请求网络的时候添加上header,然后就可以请求成功;当然这个方法虽然简单,但是有缺陷,因为在实际情况中,webview请求还需要跳转,例如我们在webview中点击链接跳转到下一个页面,这样header就就丢失了;
  2. 我们知道在UIWebviewDelegate 中有代理方法可以拦截到webview的URL请求;在 -(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType (UIWebViewNavigationType)navigationType 的代理方法中我们可以获取requset的URL,然后通过修改request的URL来添加上我们需要的认证header.[request setValue:@"header" forHTTPHeaderField: @"key"],一切看似解决了,我们可以在每次URL访问代理是否要加载URL的时候来加上自己的header,这样每次Requset请求都可实现。但是你如果在实际运行中你会发现request 请求中添加的header信息根本就没有被上传到服务器。
  3. 通过在网络上查看资料,发现了一种能彻底解决这个问题的方法,那就是通过NSURLProtocol 的方法,咋看之下,你可能认为NSURLProtocol 是一个代理,实际上它是一个OC中的抽象基类。继承于NSURLProtocol的一个子类MyURLProtocol,我们在其类方法canonicalRequestForRequest 修改request 的头信息,这样我们就可以实现我们想要的功能了。
  4. 当然NSURL还有更多强大的功能,在以后实际项目中需要的时候,可以再使用;我把自己学习的demo托管到本人的 github上面了,需要的话可以下载看看

    参考网站: https://www.raywenderlich.com/59982/nsurlprotocol-tutorial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值