NSURLSession sessionWithConfiguration未调用自定义NSURLProtocol的方法canInitWithRequest

时间:2016-06-20 11:28:52

标签: nsurlsession nsurlprotocol

我有一个NSURLProtocol的子类, NSURLConnection效果很好。

[NSURLSession sharedSession]效果也很好。

但是,[NSURLSession sessionWithConfiguration:configuration]不起作用,

我打电话给[NSURLProtocol registerClass:NSURLProtocolSubclass.class];

错误是什么?

NSString * stringUrl = @"https://www.apple.com/";
NSURL * url = [NSURL URLWithString:stringUrl];
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
urlRequest.HTTPMethod = @"GET";

NSURLSessionConfiguration * configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
configuration.timeoutIntervalForResource = 20.0;

//this can work, but I cann't edit.
//configuration.protocolClasses = @[NSURLProtocolSubclass.class];

//this can work.
NSURLSession * urlSession = [NSURLSession sharedSession];

//this not work.
//NSURLSession * urlSession = [NSURLSession sessionWithConfiguration:configuration];

//Task.
NSURLSessionDataTask * task = [urlSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSHTTPURLResponse * httpUrlResponse = (NSHTTPURLResponse *)response;
    NSLog(@"---- session: %ld", (long)httpUrlResponse.statusCode);
}];
[task resume];

1 个答案:

答案 0 :(得分:4)

WebDriverWait方法使用NSURLConnection注册协议,并使用共享会话 。其他会话在创建会话时复制全局协议集IIRC,除非您提供自定义数组,在这种情况下它会复制该数组。

以太方式,如果您需要在应用程序运行时添加协议,我非常确定您每次都必须创建一个新会话,除非您使用共享会话。