ZXRequestBlock
实现iOS应用底层所有网络请求拦截(如ajax请求拦截),包含http-dns解决方法,有效防止DNS劫持,用于分析http,https请求,禁用/允许代理,防抓包
用到第三方库 ZXRequestBlock
1,安装
通过CocoaPods安装
pod 'ZXRequestBlock'
手动导入
将ZXRequestBlock拖入项目中。
导入头文件
#import "ZXRequestBlock.h"
使用方法
拦截全局请求
[ZXRequestBlock handleRequest:^NSURLRequest *(NSURLRequest *request) {
//拦截回调在异步线程
NSLog(@"拦截到请求-%@",request);
dispatch_async(dispatch_get_main_queue(), ^{
self.blockTv.text = [self.blockTv.text stringByAppendingString:[NSString stringWithFormat:@"拦截到请求--%@\n",request]];
});
//在这里可以将request赋值给可变的NSURLRequest,进行一些修改(例如根据request的url过滤单独对一些请求的请求体进行修改等)然后再return,达到修改request的目的。
return request;
}];禁止网络代理抓包(开启后将无法通过网络代理抓包,通过Thor,Charles,Burp等均无法抓取此App的包,且在代理网络下App内部请求不受任何影响)
[ZXRequestBlock disableHttpProxy];
允许网络代理抓包【默认为允许】
[ZXRequestBlock enableHttpProxy];
禁用代理使用的做法很简单,设置 NSURLSessionConfiguration的connectionProxyDictionary这个属性为空字典即可。
看下官方文档,默认为NULL表示使用系统设置,设置一个空字典后,系统的设置就不生效了,此时通过Thor,Charles,Burp等工具就无法抓包了
This property controls which proxy tasks within sessions based on this configuration use when connecting to remote hosts.
The default value is NULL, which means that tasks use the default system settings.此属性控制在连接到远程主机时,基于此配置的会话中使用哪些代理任务。
默认值为NULL,这意味着任务使用默认的系统设置。
NSString* proxyHost = @"192.168.12.23";//@"myProxyHost.com";
NSNumber* proxyPort = [NSNumber numberWithInt: 12345];
// 创建一个代理服务器,包括HTTP或HTTPS代理,当然还可以添加SOCKS,FTP,RTSP等
NSDictionary *proxyDict = @{
// 注意,上下的key是不一样的,上面的是HTTP协议,下面的是对HTTPS协议
(NSString *)kCFNetworkProxiesHTTPEnable : [NSNumber numberWithInt:1],
(NSString *)kCFNetworkProxiesHTTPProxy: proxyHost,
(NSString *)kCFNetworkProxiesHTTPProxyPort: proxyPort,
(NSString *)kCFNetworkProxiesHTTPSEnable : [NSNumber numberWithInt:1],
(NSString *)kCFNetworkProxiesHTTPSProxy: proxyHost,
(NSString *)kCFNetworkProxiesHTTPSProxyPort: proxyPort,
};
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
// 设置代理
configuration.connectionProxyDictionary = proxyDict;
// 禁止代理
configuration.connectionProxyDictionary = @{};
connectionProxyDictionary 笔记 - 简书
iOS系统抓包入门实践之短链_哈里哈气的博客-CSDN博客_ssl_ctx_set_custom_verify
iOS App 通过代理服务器访问网络 - 简书
启用HTTPDNS(将会直接从本地或http://119.29.29.29 进行DNS解析,是一种避免DNS劫持的措施)
[ZXRequestBlock enableHttpDns];
关闭HTTPDNS【默认为关闭】
[ZXRequestBlock disableHttpDns];
禁止所有网络请求
[ZXRequestBlock cancelAllRequest];
恢复所有网络请求
[ZXRequestBlock resumeAllRequest];

