iOS中实现url重定向
2017-12-08 本文已影响822人
yanhooIT
以京东为例,展示url重定向
- 修改前:http://www.360buy.com
- 修改后:https://www.jd.com
-
测试发现经过了两次重定向,截图如下:
url重定向.png
重定向对应的HTTP状态编码
- 301
- 代表
永久性
转移(Permanently Moved) - 涉及到网址修改的,就需要使用301(如京东的的网址修改),网址更改后对搜索引擎友好的处理方法
- 代表
- 302
- 代表
临时性
转移(Temporarily Moved ) - 重定向只是临时性转移,只是临时跳转,而不是永远的更改
- 代表
iOS中实现url重定向的两种方法
-
NSURLSession
实现url重定向(推荐
)
#import "ViewController.h"
@interface ViewController ()<NSURLSessionTaskDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self requestByURLSession];
}
- (void)requestByURLSession {
NSURL *url = [NSURL URLWithString:@"http://www.360buy.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;
NSLog(@"statusCode: %ld", urlResponse.statusCode);
NSLog(@"%@", urlResponse.allHeaderFields);
}];
[task resume];
}
#pragma mark - NSURLSessionTaskDelegate
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest * __nullable))completionHandler
{
NSLog(@"statusCode: %ld", response.statusCode);
NSDictionary *headers = response.allHeaderFields;
NSLog(@"%@", headers);
NSLog(@"redirect url: %@", headers[@"Location"]); // 重定向的地址,如:http://www.jd.com
NSLog(@"newRequest url: %@", [request URL]); // 重定向的地址,如:http://www.jd.com
NSLog(@"redirect response url: %@", [response URL]);// 触发重定向请求的地址,如:http://www.360buy.com
completionHandler(request);
// completionHandler(nil);// 参数为nil,表示拦截(禁止)重定向
}
@end
-
NSURLConnection
实现url重定向
#import "ViewController.h"
@interface ViewController ()<NSURLConnectionDataDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self requestByURLConnection];
}
- (void)requestByURLConnection {
NSURL *url = [NSURL URLWithString:@"http://www.360buy.com"];
NSMutableURLRequest *quest = [NSMutableURLRequest requestWithURL:url];
quest.HTTPMethod = @"GET";
NSURLConnection *connect = [NSURLConnection connectionWithRequest:quest delegate:self];
[connect start];
}
#pragma mark - NSURLConnectionDataDelegate
- (nullable NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(nullable NSURLResponse *)response
{
NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
NSLog(@"statusCode: %ld", urlResponse.statusCode);
NSDictionary *headers = urlResponse.allHeaderFields;
NSLog(@"%@", headers);
NSLog(@"redirect url: %@", headers[@"Location"]); // 重定向的地址,如:http://www.jd.com
NSLog(@"newRequest url: %@", [request URL]); // 重定向的地址,如:http://www.jd.com
NSLog(@"redirect response url: %@", [urlResponse URL]);// 触发重定向请求的地址,如:http://www.360buy.com
return request;
}
@end