NSURLConnection 废弃之后使用 NSURLSession,NSURLSessionTask 进行重定向
#import "ReplacingImageURLProtocol.h"
#import <UIKit/UIKit.h>
static NSString* const FilteredKey = @"FilteredKey";
@interface ReplacingImageURLProtocol() <NSURLSessionDelegate>
@end
@implementation ReplacingImageURLProtocol
+ (BOOL)canInitWithRequest:(NSURLRequest *)request {
if ([NSURLProtocol propertyForKey:FilteredKey inRequest:request]) {
return NO;
}
if ([request.URL.absoluteString isEqualToString:@"http://www.baidu.com/"]) {
return YES;
}
return NO;
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
}
- (void)startLoading {
[NSURLProtocol setProperty:@YES forKey:FilteredKey inRequest:self.request];
NSMutableURLRequest *mutReq = self.request.mutableCopy;
mutReq.URL = [NSURL URLWithString:@"http://sina.cn/"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];
NSURLSessionTask *task = [session dataTaskWithRequest:mutReq];
[task resume];
}
- (void)stopLoading {
}
#pragma mark ================ NSURLSessionDelegate ================
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
[[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
completionHandler(NSURLSessionResponseAllow);
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
[[self client] URLProtocol:self didLoadData:data];
}
@end