首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Molier的小站

    NSURLProtocol 对 WKWebView 的处理

    之前写过一篇文章是关于基于 NSURLProtocol 做的 DNS 解析,其中对 NSURLProtocol 也有了简单的介绍,我们都知道他可以拦截所有基于 URL Loading System 中的请求 拉下代码直接搜索 NSURLProtocol,看看有没有有关的信息 看来的确是有和 NSURLProtocol 有关系,后面通过断点的调用栈中也找到了 + [NSURLProtocol canInitWithRequest :] 这样的字样,再通过网上查一些资料也证实了我的猜想,其实 WKWebview 在一开始时候是会调用到 NSURLProtocol 中的入口方法 canInitWithRequest 的,但是就没有然后了 ,也就是说 WKWebview 是和 NSURLProtocol 有一定关联,只是在 NSURLProtocol 的入口处返回 NO 所以导致 NSURLProtocol 不接管 WKWebview 的请求 不过这里有一个疑问,苹果在使用 webkit 时候为什么会把 http/https 这样大众化的 scheme 过滤掉,看来他是不建议开发者来使用 NSURLProtocol

    1.9K30编辑于 2022-11-03
  • 来自专栏蜉蝣禅修之道

    iOS开发之NSURLProtocol的那些坑

    那么,首先讲解一下NSURLProtocol怎么使用吧。 1. 定义一个NSURLProtocol的子类 在继承NSURLProtocol中,我们需要实现 + (BOOL)canInitWithRequest:(NSURLRequest *)request, 定义拦截请求的 在网络请求前注册NSURLProtocol // 注册拦截请求的NSURLProtocol [NSURLProtocol registerClass:[CFHttpMessageURLProtocol 请求结束后注销NSURLProtocol [NSURLProtocol unregisterClass:[CFHttpMessageURLProtocol class]]; 好了,到这里NSURLProtocol 下面主要讲一下NSURLProtocol在使用过程中可能会遇到的坑,给自己以及需要的朋友留个提醒。 1.

    2.9K91发布于 2018-05-24
  • 来自专栏iOS逆向与安全

    iOS小技能:【intercept the HTTPHTTPS requests 】利用NSURLProtocol 拦截请求

    前言 动手实践:写一个tweak ,修改请求的HTTPHeaderField NSURLProtocol 只能拦截 UIURLConnection、NSURLSession 和 UIWebView 中的请求 应用场景: 1、 自定义请求头的HTTPHeaderField 2、针对NSURLSessionConfiguration设置代理和端口,让一些特殊的请求走自定义的隧道IP和端口 I NSURLProtocol 拦截 HTTP 请求 1.1 NSURLProtocol 拦截 HTTP 请求的原理 An NSURLProtocol object handles the loading of protocol-specific HTTP 请求开始时,URL 加载系统创建一个合适的 NSURLProtocol 对象处理对应的 URL 请求,因此我们只需写一个继承自 NSURLProtocol 的类,并通过 - registerClass 1.2 使用 NSURLProtocol 拦截 HTTP 请求 从CSDN下载Demo:https://download.csdn.net/download/u011018979/16753164 1、

    1.8K30编辑于 2022-12-19
  • 来自专栏HelloCode开发者学习平台

    NSURLPtotocol 网络hooker

    NSURLProtocol的作用 NSURLProtocol可以拦截监听每一个URL Loading System中发出request请求,记住是URL Loading System中那些类发出的请求, 如果不是这些类发出的请求,NSURLProtocol就没办法拦截和监听了。 忽略网络请求使用本地缓存 重定向网络请求 改变request的请求头 NSURLProtocol的使用 因为NSURLProtocol是一个虚基类,所以不能直接使用它,要想使用它就必须自定义一个类成为他的子类 每一个NSURLProtocol的子类都有一个client对象来处理请求得到的response。其实下面这些写法都是差不多固定的。 总结 NSURLProtocol的一些坑 死循环 调试恶心。 注意点 可以注册多个NSURLProtocol的子类,注册多个NSURLProtocol子类会逆序去执行,也就是先注册的子类后执行。

    55720编辑于 2023-03-23
  • 来自专栏用户6296428的专栏

    有赞 App 如何实现动态域名

    3.1.1 NSURLProtocol An abstract class that handles the loading of protocol-specific URL data.苹果官方文档这样介绍 请求开始,URL会加载系统创建的NSURLProtocol对象处理对应的URL请求,根据文档我们只需要创建一个子类继承自NSURLProtocol,通过registerClass:方法注册我们自定义的网络协议类 那么,我们需要解决的问题就是使用自定义的NSURLProtocol来处理App所有的网络请求,苹果官方文档中CustomHTTPProtocol介绍了如何自定义NSURLPtotocol来实现网络拦截。 回到之前的问题,我们如何使用NSURLProtocol拦截Http请求?只需要判断对于那些请求request需要处理;对于需要处理的request做出哪些处理;再将响应请求的数据传递给调用者。 iOS端采用继承NSURLProtocol来实现对网络拦截、Android端采用插桩来达到网络请求拦截,最终都配合配置中心动态下发域名来达到动态域名的目的。

    7.4K31发布于 2021-04-12
  • 来自专栏戴铭的博客

    iOS预加载Web页面方案

    相关设置 - (STMURLCacheMk *(^)(BOOL)) isUsingURLProtocol; //是否使用NSURLProtocol,默认使用NSURLCache 也可以随时更新这些设置项 使用 NSURLProtocol 这种原理基本类似。 白名单实现原理 创建域名列表设置项 whiteListsHost 和 userAgent 设置项,在创建和更新时对其进行设置。 [task resume]; return cachedResponse; } return nil; } } NSURLProtocol 的实现 在设置配置项和更新配置项时需要创建一个 STMURLCacheModel 的单例来进行设置和更新配置项给 NSURLProtocol 的实现来使用。 通过 isUsingURLProtocol 设置项区分, NSURLProtocol 是通过registerClass方式将protocol实现的进行注册。

    2.3K10发布于 2020-06-16
  • 来自专栏iOS开发攻城狮的集散地

    iOS WKWebView设置cookie方法总结

    同时WKWebView发起的资源请求也是不经过NSURLProtocol的,导致无法自定义请求。 让WKWebview支持NSURLProtocol可参考:NSURLProtocol对WKWebView的处理 所以这里应该很清楚,NSHTTPCookieStorage已经用不到了,但是你可以把他作为存储

    7K31发布于 2021-09-07
  • 来自专栏H5性能优化

    H5秒开技术选型

    基于NSURLProtocol进行请求拦截,实现预加载3. 基于WKURLSchemeHandler进行自定义scheme注册拦截,实现预加载4. 基于NSURLProtocol进行请求拦截,实现预加载描述:在UIWebView上,创建个子类,在子类里面实现protocol的代理方法即可实现对所有请求的拦截。 优点:UIWebView原生支持缺点:WKWebView网络请求独立于主进程,NSURLProtocol无法拦截。可以通过私有api可以解决问题,但是会有上架风险。3.

    1.6K40编辑于 2022-12-01
  • 来自专栏腾讯Bugly的专栏

    WKWebView 那些坑

    3、WKWebView NSURLProtocol问题 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在 WKWebView 上直接使用 NSURLProtocol WKBrowsingContextController registerSchemeForCustomProtocol:] 通过注册 http(s) scheme 后 WKWebView 将可以使用 NSURLProtocol 一旦注册 http(s) scheme 后,网络请求将从 Network Process 发送到 App Process,这样 NSURLProtocol 才能拦截网络请求。 如果通过 registerSchemeForCustomProtocol 注册了 http(s) scheme, 那么由 WKWebView 发起的所有 http(s)请求都会通过 IPC 传给主进程 NSURLProtocol request2; 通过 +[WKBrowsingContextController registerSchemeForCustomProtocol:]注册 scheme: post://; 注册 NSURLProtocol

    5.5K130发布于 2018-03-23
  • 来自专栏蜉蝣禅修之道

    iOS开发之CFHttpMessageRef的那些坑

    在上一篇文章iOS开发之NSURLProtocol的那些坑中,介绍了一些NSURLProtocol使用过程中可能遇到的问题,今天我们就接着说CFHttpMessageRef。 相信大家已经看出来了,这里通过self.client通知NSURLProtocol所监听的连接,告知其目前请求的状态。 本篇文章和上一篇其实是NSURLProtocol和CFHttpMessageRef结合使用的实践,文章的篇幅有限,完整的代码可到https://github.com/Dave1991/alicloud-ios-demo

    2.4K61发布于 2018-05-24
  • 来自专栏云原生布道专栏

    IOS开发系列——NSUrlSession专题

    %@",fileError); } }else{ NSLog(@"downloaderror:%@",error); } }]; //5.开启任务 [downloadTaskresume]; } 2NSUrlProtocol 中URLSession使用 【主要参考】使用NSURLProtocol和NSURLSession拦截UIWebView的HTTP请求(包括ajax请求) http://www.cnblogs.com/wobuyayi /p/6283599.html 注意:NSURLProtocol只能拦截UIWebView、NSURLConnection、NSURLSession和基于NSURLConnenction、NSURLSession 下面提供一个完整的NSURLProtocol的实现类: RichURLSessionProtocol.h #import@interfaceRichURLSessionProtocol : NSURLProtocol challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; //} } @end 3参考链接 (Good)使用NSURLProtocol

    1K30编辑于 2023-10-11
  • 来自专栏前端黑板报

    iOS WebView 的 Hybrid 框架设计

    JS 执行速度快、内存占用小,刚一推出就被开发者所追捧,但是不知道是不是因为苹果爸爸太任性,WKWebView 设计上并没有与 UIWebView 保持一致,无法自动存储 Cookie 和不能通过 NSURLProtocol 本套框架的预加载和缓存模块儿需要借助 NSURLProtocol 实现,所以这里还是优先使用 UIWebView(想吐个槽,其实如果预加载和缓存这套系统做好以后,UIWebView 的效果并没不比 WKWebView 请求的定制需要借助 NSURLProtocol。 navigationType: 方法捕获,从而执行相应的操作,但是属于异步操作;还有一种前端可以通过 Ajax 发起 Bridge 请求,可以有同步异步两种方式,不过在 WebView 这层捕获不到此请求,只能通过 NSURLProtocol

    2K10发布于 2018-12-24
  • 来自专栏iOS逆向与安全

    iOS小技能:UIWebView 被拒的解决方案(用更安全的WKWebView替代UIWebView)

    userContentController didReceiveScriptMessage:(WKScriptMessage *)message;// message: 收到的脚本信息 WKWebView比UIWebView更安全 基于NSURLProtocol 实现iOS应用底层所有网络请求拦截(含网页ajax请求拦截【不支持WKWebView】NSURLProtocol 只能拦截 UIURLConnection、NSURLSession 和 UIWebView

    4K20编辑于 2022-12-19
  • 来自专栏啄木鸟软件测试

    网易严选的wkwebview测试之路

    但是他有一个最致命的缺陷,就是WKWebView的请求不能被NSURLProtocol截获。 而UIwebview可以让app对于H5容器使用NSURLProtocol技术将H5进行离线包的处理,H5的图片和Native的图片公用一套缓存,因此WKWebView是没有做缓存处理的,对网页需要缓存的加载性能要求没那么高的还是可以考虑

    2.1K10发布于 2019-12-11
  • 来自专栏IT大咖说

    一个 Hybrid SDK 设计与实现

    这样客户端可以做的事情就非常多了,举个例子,NSURLProtocol 无法拦截 WKWebview 发起的网络请求,采用 Hybrid 方式交由客户端来发送,便可以实现对应的拦截。 NSURLProtocol能够让你去重新定义苹果的URL加载系统(URL Loading System)的行为,URL Loading System里有许多类用于处理URL请求,比如NSURL,NSURLRequest 当URL Loading System使用NSURLRequest去获取资源的时候,它会创建一个NSURLProtocol子类的实例,你不应该直接实例化一个NSURLProtocolNSURLProtocol WKWebView 网络请求拦截 方法一(Native 侧): 原生 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此在 WKWebView 上直接使用 NSURLProtocol

    1.7K10发布于 2021-07-19
  • 来自专栏iOS逆向与安全

    iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)

    iOS请求安全防护【1、 防代理分析请求数据 2、SSL证书认证3、采用签名禁止修改报文4、不在本地缓存网络请求报文5、利用NSURLProtocol 拦截请求修改HTTPHeaderField】文章地址

    1.3K30发布于 2021-03-08
  • 来自专栏前端自习课

    Hybrid App 应用 开发中 9 个必备知识点复习(WebView / 调试 等)

    WKWebView NSURLProtocol问题 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此,在 WKWebView 上直接使用 NSURLProtocol 一旦注册 http(s) scheme 后,网络请求将从 Network Process 发送到 App Process,这样 NSURLProtocol 才能拦截网络请求。 如果是用正常 HTTP 和 HTTPs 就是用 WKWebView 自带的拦截器,自定义协议用 NSURLProtocol 拦截。 详细可以参考:《NSURLProtocol处理WKWebView的http和https的请求》 5.

    4.2K00发布于 2019-09-05
  • 来自专栏HelloCode开发者学习平台

    Alamofire-URLSession必备技能

    支持自定义协议 protocolClasses:在会话中处理请求的额外协议子类的数组 URLProtocol:一个NSURLProtocol对象处理加载协议特定的URL数据。 在NSURLProtocol类本身是一个抽象类,可以为与特定URL方案的URL处理基础设施。您可以为您的应用支持的任何自定义协议或URL方案创建子类 8.

    2.9K20编辑于 2023-03-23
  • 来自专栏子曰五溪

    写写对于Web开发需要知道的 2017 WWDC

    WKHTTPCookieStore 来管理与 WKWebsiteDataStore 相关的HTTP cookie 新增了 WKURLSchemeHandler 协议来处理自定义的URL Scheme,这相当于是一个简化版的NSURLProtocol

    75530发布于 2019-06-24
  • 来自专栏freesan44

    主线程中也不绝对安全的 UI 操作

    returning-to-background-thread-from-uialertviewdelegate-callback http://www.jianshu.com/p/5876db1de407 http://xiangwangfeng.com/2014/11/29/NSURLProtocol

    1.2K10发布于 2018-09-05
领券