設(shè)計(jì):
首先,本地保存一份初始的DNS Json文件
然后根據(jù)時(shí)機(jī)進(jìn)行更新和廢除
PS:本部分,未進(jìn)行實(shí)現(xiàn)
使用
直接替換IP
NSString *originUrlString = [request.URL absoluteString];
NSString *originHostString = [request.URL host];
NSRange hostRange = [originUrlString rangeOfString:originHostString];
if (hostRange.location != NSNotFound) {
NSString *ip = [[CustomDNSManager sharedClient] requestIPWithHost:originHostString];
}
以下只攔截請求,不修改請求
若要修改,修改RichURLSessionProtocol中的canonicalRequestForRequest方法
全局?jǐn)r截
不包含單獨(dú)的session和AFN
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[NSURLProtocol registerClass:[RichURLSessionProtocol class]];
}
UIWebView攔截
期間的接口請求也會被攔截
頁面初始化時(shí)
- (void)viewDidLoad {
[super viewDidLoad];
[NSURLProtocol registerClass:[RichURLSessionProtocol class]];
}
頁面銷毀
- (void)dealloc {
[NSURLProtocol unregisterClass:[RichURLSessionProtocol class]];
}
AFN攔截或者NSURLSessionConfiguration
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSArray *protocolClasses = @[[RichURLSessionProtocol class]];
config.protocolClasses = protocolClasses;
AFHTTPSessionManager *manage = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
WKWebview
- [Github:NSURLProtocol-WebKitSupport] (https://github.com/Yeatse/NSURLProtocol-WebKitSupport)
參考文獻(xiàn):
- [可能是最全的iOS端HttpDns集成方案] (http://www.itdecent.cn/p/cd4c1bf1fd5f)
- NSURLPtotocol無法攔截AFN ,WKWebView