工作中遇到了獲取重定向URL地址的問(wèn)題,網(wǎng)上AFN獲取的文章比較少,所以打算記錄一下.話(huà)不多說(shuō).直接上代碼
Demo地址 (https://github.com/MrPlusZhao/RequestCode302URL.git)
1: NSURLSession 方法 (記得設(shè)置<NSURLSessionTaskDelegate>)
/// 用NSURLSession 獲取重定向URL地址
重點(diǎn)是 willPerformHTTPRedirection 這個(gè)代理方法
- (void)request302
{
NSURL *url = [NSURL URLWithString:@"https://www.bing.com"];
NSMutableURLRequest *quest = [NSMutableURLRequest requestWithURL:url];
quest.HTTPMethod = @"GET";
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue currentQueue]];
NSURLSessionDataTask *task = [urlSession dataTaskWithRequest:quest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
if (urlResponse.statusCode == 302) {
// do something ...
NSLog(@"重定向地址 == %@",urlResponse.allHeaderFields[@"Location"]);
}
}];
[task resume];
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler{
NSLog(@"%ld",response.statusCode); // 302
NSLog(@"%@",response.allHeaderFields[@"Location"]); // 重定向地址URL
// completionHandler(nil); 打開(kāi),block會(huì)有回調(diào),不打開(kāi)就沒(méi)有回調(diào),根據(jù)業(yè)務(wù)需求決定
}
2:AFN 獲取重定向URL地址
重點(diǎn)是setTaskWillPerformHTTPRedirectionBlock 方法
/// 用AFN 攔截重定向URL地址
- (void)request302ForAFN
{
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"https://www.bing.com" parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject = %@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error = %@",error);
}];
[manager setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest * _Nullable(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLResponse * _Nonnull response, NSURLRequest * _Nonnull request) {
NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
if (urlResponse.statusCode == 302) {
// do something ...
NSLog(@"重定向地址 == %@",urlResponse.allHeaderFields[@"Location"]);
// https://www.bing.com ----> http://cn.bing.com
}
if (request) {
return request;
}else{
return nil;
}
}];
}