iOS HTTP DNS方案研究

Github地址

设计:

首先,本地保存一份初始的DNS Json文件
然后根据时机进行更新和废除
PS:本部分,未进行实现

使用

直接替换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方法

全局拦截

不包含单独的session和AFN

 -(BOOL)application:(UIApplication *)application 
 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [NSURLProtocol registerClass:[RichURLSessionProtocol class]];
}

UIWebView拦截

期间的接口请求也会被拦截
页面初始化时

- (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

参考文献:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容