NetworkInterceptor
这是一个简单的框架,展示了如何在 iOS 应用中拦截 URLRequest。这个框架允许您检查应用程序发出的所有出站请求的详细信息。这包括由第三方框架(如 FacebookSDK、Google Analytics 等)发出的请求。有可能使用此框架在非越狱设备上检查和拦截 App Store 应用。
安装
CocoaPods
NetworkInterceptor 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中
pod 'NetworkInterceptor'
主要组件
- NetworkInterceptor.swift 管理URLRequest拦截过程的主要类。
- NetworkRequestSniffableUrlProtocol.swift 允许我们观察(和嗅探)出站请求的 URLProtocol 类。
- NetworkRedirectUrlProtocol.swift URLProtocol 类,允许我们将请求重定向到不同的 URL。
- RequestEvaluator 协议,用于类评估是否允许对 URLRequest 进行操作
- SniffableRequestHandler 协议,用于类处理对 URLRequest 的嗅探/监视
- RedirectableRequestHandler 协议,用于类处理创建重定向 URLRequests
- NetworkInterceptorConfig 结构体,定义用于配置拦截过程的配置对象
如何使用 NetworkInterceptor
示例 1:使用 NSLog 记录所有 http/https 请求
let requestSniffers: [RequestSniffer] = [
RequestSniffer(requestEvaluator: AnyHttpRequestEvaluator(), handlers: [
SniffableRequestHandlerRegistrable.console(logginMode: .nslog).requestHandler()
])
]
let networkConfig = NetworkInterceptorConfig(requestSniffers: requestSniffers)
NetworkInterceptor.shared.setup(config: networkConfig)
NetworkInterceptor.shared.startRecording()
示例 2:对于指向 "www.antennahouse.com" 的所有请求,将所有匹配的请求重定向到自定义 URL
let requestRedirectors: [RequestRedirector] = [
RequestRedirector(requestEvaluator: DomainHttpRequestEvaluator(domain: "www.antennahouse.com"),
redirectableRequestHandler: AlternateUrlRequestRedirector(url: URL(string: "https://www.rhodeshouse.ox.ac.uk/media/1002/sample-pdf-file.pdf")!))
]
let networkConfig = NetworkInterceptorConfig(requestRedirectors: requestRedirectors)
NetworkInterceptor.shared.setup(config: networkConfig)
NetworkInterceptor.shared.startRecording()
可用的 Request Evaluators
AnyHttpRequestInterceptor.swift 拦截所有 http 和 https 请求
DomainHttpRequestEvaluator.swift 拦截所有与给定域名 URL 匹配的 http 和 https 请求
可用的 Sniffable Request Handlers
ConsoleLoggerSniffableRequestHandler.swift 将请求以 cURL 格式打印到控制台
SlackSniffableRequestHandler.swift 将请求以 cURL 格式发送到指定的 Slack 频道。您必须提供自己的 Slack 身份验证令牌和 Slack 频道 ID 才能使用此功能。
AlternateDomainSniffableRequestHandler.swift 将请求副本发送到备用域名
可用的 Request Redirectors
AlternateDomainRequestRedirector.swift 将请求重定向到不同的域名。
AlternateUrlRequestRedirector.swift 将请求重定向到完全不同的URL
如果您想在非您拥有的iOS设备应用中使用此框架
- 创建一个新的动态框架项目,并使用 NetworkInterceptor pod。我们仅使用此框架来开始NetworkInterceptor录制。
- 使用Objective C将代码加载到内存中。请参阅此仓库中的示例项目。
static void __attribute__((constructor)) initialize(void)
- 使用iphoneos架构构建库。
- 获取没有数字版权管理保护的.ipa文件。您可以从https://www.iphonecake.com下载破解的.ipa文件
- 使用optool将NetworkInterceptor pod框架和您的新动态框架注入到.ipa中。您也可以使用此仓库中的脚本https://github.com/depoon/iOSDylibInjectionDemo。确保您包含了所有必要的依赖框架或库。
- 使用Cydia Impactor加载修改后的应用。