UIWebView拦截资源请求

HTTPInterceptor:在iOS中拦截HTTP网络请求 如果使用上的任何问题请各位大佬提issue,或者加我微信哦。 项目有在调用苹果私有api,以便拦截WKWebView发出去的网络请求,但是方法名已经使用Base64进行了编码,为了防止苹果静态扫描和检查,所以存在一定架风险,请大家合理利用,最安全还是在调试下,开发中使用。 该项目正在调用Apple私有api,以拦截发送到网络的WKWebView请求,但api签名已在Base64中进行编码,以防止Apple静态扫描和检查,因此存在一定风险,请合理使用,最安全的还是在Debug中,开发使用。 :folded_hands: :folded_hands: 如果HTTPInterceptor对你有帮助,给楼主一个小星星 :sparkles:是对楼主最好的支持和动力。如果有疑问,欢迎来提问题,你们的质疑是对楼主最好的反馈。 如果有帮助,plesae给项目一点星星 :sparkles:是对我最好的支持。如有任何疑问,请为我提交问题。您的问题对我是最好的反馈。 关于HTTPInterce 立即下载

项目中web页埋点以加载资源文件的形式发起请求,当客户端拦截到该请求时,要求放弃发送该请求,改为客户端统计此次埋点事件。

解决方案
NSURLProtocol可以拦截监听每一个URL Loading System中发出request请求。(如果不是这些类发出的请求NSURLProtocol就没办法拦截和监听了)

NSURLProtocol是一个虚基类,所以不能直接使用它,要想使用它就必须自定义一个类成为他的子类,然后实现他里面的必须实现的一些方法

+ (BOOL)canInitWithRequest:(NSURLRequest *)request {
    /*
    //防止死循环,必要时使用
    if ([NSURLProtocol propertyForKey:protocolKey inRequest:request]) {
        return NO;
    }
    */
    NSString * urlString = request.URL.absoluteString;
    //需要处理请求返回YES
    return [WebViewStatistics webViewSendStatisticsWithURL:uslString];
}

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
    // return request;
    //这里直接拦截不发送
    return nil;
}

// 如需要重新发送请求可以在下列方法处理,不实现下面的方法,请求会以超时的形式结束。
// 踩的坑:一开始正常返回request,不实现下面的方法,结果请求加载超时影响webView加载完成回调代理方法。最后改为返回请求时直接返回nil,不再发起请求。
- (void)startLoading {
}

- (void)stopLoading {
}

除了这些你还需要在程序启动的时候注册该子类:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [NSURLProtocol registerClass:[IFStatisticsURLProtocol class]];

    return YES;
}

在发起请求时为NSURLSessionConfiguration的protocolClasses属性赋值(可以考虑使用Method Swizzling方法):

NSURLSessionConfiguration * configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.protocolClasses = @[[IFStatisticsURLProtocol class]];

踩坑记录:一开始天真的以为webView加载的所有请求都会调用代理方法,o( ̄︶ ̄)o

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
     return YES;
}
ios 事件拦截 NULL 博文链接:https://justsee.iteye.com/blog/2202529 立即下载

相关推荐

详解如何拦截iOS所有网络请求

主要介绍了详解如何拦截iOS所有网络请求,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

iOS使用NSURLProtocol来Hook拦截WKWebview请求并回放的一种姿(ti)势(wei)

有些时候我们难免需要和 WKWebView 做一些交互,虽然__WKWebView__性能高,但是坑还是不少的 例如:我们在__UIWebview__ ,可以通过如下方式获取js上下文,但是在__WKWebView__是会报错的 let context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptCon...

weixin_34029680的博客 1129

MD01和MD01N比较

摘要:MD01(传统MRP)与MD01N(MRP Live)是SAP系统不同版本的物料需求计划事务码。核心差异包括:MD01N取消MRP列表、简化计划规则、合并MPS/MRP操作、采用BAdI技术等,体现S/4HANA平台简化、标准化和智能化的演进方向。MD01N通过优化参数配置、增强筛选功能、利用HANA实时计算能力,实现了更高效的物料计划流程,代表了新一代计划引擎的技术革新。

SAP_LES_COM的博客 891

【iOS】WKWebView实现请求拦截,http/https/file等

本文是通过WKURLSchemeHandler的方式实现的请求拦截,WKWebView的WKURLSchemeHandler是不支持拦截http/https/file等原始协议的,如果通过[config setURLSchemeHandler:handler forURLScheme:@"http"];就会闪退,但是支持自定义协议,但是有时候项目就是需要拦截这些请求,该怎么处理呢? 一、自定义一个HFURLSchemeHandler类,并实现WKURLSchemeHandler代理 1、HFURLSch

colrying的博客 8883

华为2021年天线工程师笔试题目回忆总结(持续更新)

1. 判定长线和短线 所谓长线是指传输线的几何长度和线上传输电磁波的波长的比值(即电长度)大于或接近于1。反之称为短线。是相对于波长而言的。 1000m的传输线,对于频率为50hz(即波长为6000km)的交流电来说,仍远小于波长,应视为短线。长线和短线的区别还在于:长线为分布参数电路,而短线是集总参数电路。 2. 判定传输线的容性和感性 传输线上的输入阻抗具有以下特点: 1/4波长变换性:感性负载与容性负载变换,开路与短路变换; 1/2波长重复性:相距1/2波长的整数倍的两个点输入阻抗都相等。1/4开路传

ludashi3的博客 9530

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1524

iOS UIWebView URL拦截

http://www.cocoachina.com/ios/20150626/12161.html 本文译者:candeladiao,原文:URL filtering for UIWebView on the iPhone说明:译者在做app开发时,因为页面的javascript文件比较大导致加载速度很慢,所以想把javascript文件打包在app里,当UIWebView需要加载该脚本时...

weixin_30653023的博客 294

实验记录 | 如何拆分scATAC-seq数据成为单个细胞?(1、解决barcode问题)

在师兄的帮助下,我得到了师兄筛选过的细胞的barcode的数据,那么接下来我想根据这些barcode,将来源于同一个barcode的细胞的reads提取出来,这个还是一个蛮有技术含量的事情的,因为上次我有使用过perl的脚本进行提取,最后的实验结果很糟糕,故而这件事情一直搁置到现在,没有继续去做(我的脚本的编写能力还是有待于加强,可能是刚刚喝了奶茶,和老妈弟弟聊了好多闲话,很开心,觉得在某种程度上休息够了,对于工作也是一种非常快乐和积极的状态了)。 0。前期失败尝试回顾 ...

weixin_40640700的博客 1887

UIWebView的基本使用/拦截URL/禁止选中/alert弹框

UIWebView的基础使用 CGRect bouds = [[UIScreen manScreen]applicationFrame]; UIWebView* webView = [[UIWebView alloc]initWithFrame:bounds]; 属性: @property (nonatomic) BOOL scalesPageToFit; // 是...

ZHANGBO9477的博客 353

告别功能限制:Win11家庭版无损升级专业版全攻略

本文详细介绍了如何将Win11家庭版无损升级到专业版的全过程,包括升级前的准备、两种官方升级方案(Microsoft Store购买和使用产品密钥)以及命令行升级方法。升级后可解锁远程桌面、组策略编辑器和BitLocker加密等高级功能,适合需要更多商业功能的用户。

weixin_32822843的博客 702

探针卡技术演进:从金线微针到MEMS探针的Wafer Sort革命

本文探讨了探针卡技术从传统金线微针到MEMS探针的演进,及其对晶圆测试(Wafer Sort)的革命性影响。随着芯片焊垫间距进入45微米以下,MEMS技术凭借其超高精度、超长寿命和卓越的信号完整性,成为应对高密度、高速及3D IC测试挑战的关键,显著提升了测试效率与稳定性。

lstm7chronicler的博客 365

UIWebView Url拦截

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"allHTTPHeaderFields********%@",request....

weixin_30568715的博客 153

RPA 财务共享中心与RPA赋能

在和集团财务官交流的时候,客户经常会提到FSSC,其中有准备建立FSSC,正在建立FSSC,以及已建成FSSC正使用的,当中会有些对FSSC的疑虑和问题,所以花费些时间对FSSC进行了深入调研,从而也有幸拜读了王兴山、陈剑、梅震、钱自严等专业人士写的几本关于FSSC的书,对FSSC的前因后果有了更深入的认识,同时结合自己在FSSC的一些项目经验,故做了本次分享。 本文章主要分享财务共享中心以及R...

weixin_40244959的博客 2756

iOS开发之UIWebView使用总结

iOS开发之UIWebView使用总结 1.基本方法: - (void)loadRequest:(NSURLRequest *)request; - (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL; 2.代理方法 - (BOOL)webView:(UIWebView *)webView shouldSta

Walden_tinghou的专栏 1047

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 398

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IOS URL加载系统 UIWebView URL拦截

转自:http://prolove10.blog.163.com/blog/static/138411843201443111235812/ 转自:http://www.cocoachina.com/ios/20150626/12161.html iOS根本离不开网络——不论是从服务端读写数据、向系统分发计算任务,还是从云端加载图片、音频、视频等。 当应用程序面临处理问题的抉

demondev 4420

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WKWebView拦截资源

背景 由于苹果对UIWebView的各种放弃,现在向WKWebView上面转才是正道,在从UIWebView转到WKWebView的过程中,还是遇到不少问题的.尤其是WKWebView的拦截资源很成问题.下面介绍下我遇到的问题和做的一些解决办法. 解决方法 1.第一种解决方法 [NSURLProtocol wk_registerScheme:@"http"]; [NSURLProtocol wk_registerScheme:@"https"]; 2.第二种解决方法 自定义类遵守WKURLScheme

回梦游仙 1417

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

APP在加载外部html时选择加载本地的js、css、img等资源文件(下:iOS篇)<转载>

上篇博客回顾了下安卓开发如何在加载外部html的时候加载本地的js、css、img等资源文件,这篇回顾一下iOS的方法,iOS要实现这个就要用到一个类NSURLProtocol,以下文章转载自一位大神的博客:原博客链接:http://www.jianshu.com/p/2ed92d399b4b/comments/4668793 NSURLProtocol 它是干什么的呢,是一个挺牛逼的类,它是一个抽

huzhenv5的博客 2328

webview hook

Chrome chrome.webRequest API [可用] chrome.declarativeWebRequest [开发中] Android http://developer.android.com/intl/zh-CN/reference/android/webkit/WebViewClient.html public boolean shouldO

饭叔 2195

UIWebView (NSURLProtocol)拦截js、css

原文链接:http://www.cocoachina.com/ios/20161202/18261.html 公司最近有个需求,去除h5页面的广告,最后实现的方式是后台去过滤,移动端这里只需要拦截里面的一个css地址重定向就可以.开会的时候以为很简单,毕竟UIWebView协议方法里面有个每次请求都会走的协议方法- (BOOL)webView:(UIWebView *)webView

lvchaman的专栏 1399

js加载某盘下html文件位置,APP在加载外部html时选择加载本地的js、css、img等资源文件(下:iOS篇)<转载>...

上篇博客回顾了下安卓开发如何在加载外部html的时候加载本地的js、css、img等资源文件,这篇回顾一下iOS的方法,iOS要实现这个就要用到一个类NSURLProtocol,以下文章转载自一位大神的博客:NSURLProtocol它是干什么的呢,是一个挺牛逼的类,它是一个抽象类,不能去实例化它,只能子类化NSURLProtocol,每次在对一个 URL 进行请求的时候 URL Loading ...

weixin_33421437的博客 179

[IOS]UIWebView 请求网络页面或者加载本地资源页面

UIWebView是一个能够显示网页的IOS视图控件,我们可以用它来访问一个网站。下面是具体的实例: 操作步骤: 1.首先在xib文件中拖放一个UIWebView控件到view中 2.将下载的页面以及页面资源加载到项目中,但必须选择Create folder references for any added folders,然后知道文件在项目中是蓝色显示,而不是黄色显示 3.将webVie

学无止境的专栏 4574

iOS-利用本地数据来代替远程UIWebView请求

在这篇文章中,我将讲述如何在iOS中的UIWebView中加载一个网页,使用修正的NSURLCache来用本地网页资源复本来代替基于远程网页的数据复本。 介绍 正常情况下当你需要写一个具备网络连接的iOS程序,你会想要一个本地的iOS接口能够接收网络上的所有数据。 然而,在项目中总是有一些限制你可以实现的东西,而且有时候你可能想要为用户显示一个规整的页面。 如果你打算采用这种方式,你最好确

muyu114的专栏 2853

工作中 WKWebView 用的真的多,可是你真的能驾驭住吗???

????????关注后回复“进群”,拉你进程序员交流群????????WKWebView拦截实现探讨背景苹果更新邮件Updating Apps that Use Web Views December 23, 2019 If your app still embeds web content using the deprecated UIWebView API, we strongly e...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 459
上一篇: iOS 实现react-native预加载,优化第一次加载白屏问题
下一篇: iOS客户端React-Native增量更新实践
wf_breeze
博客等级 码龄11年 2粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值