以京东为例,展示url重定向
- 测试url:https://www.360buy.com
重定向对应的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:@"https://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(@"请求成功后的回调===>\nstatus Code: %ld\nHeader Fields: \n%@", urlResponse.statusCode, 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
{
NSDictionary *headers = response.allHeaderFields;
// 获取重定向后请求地址的两种方式:headers[@"Location"] 和 [request URL]
NSLog(@"请求重定向回调===>\nstatus Code: %ld\nHeader Fields: \n%@\n重定向【前】的请求地址: %@\n重定向【后】的请求地址: %@\n", response.statusCode, headers, [response URL], [request URL]);
completionHandler(request);
// completionHandler(nil);// 通过设置参数为nil,可以【禁止/拦截】重定向
}
@end
-
测试结果如下图:
NSURLSession实现url重定向(推荐)
NSURLConnection实现url重定向
- 代码实现
#import "ViewController.h"
@interface ViewController ()<NSURLConnectionDataDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self requestByURLConnection];
}
- (void)requestByURLConnection {
NSURL *url = [NSURL URLWithString:@"https://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;
NSDictionary *headers = urlResponse.allHeaderFields;
NSLog(@"请求重定向回调===>\nstatus Code: %ld\nHeader Fields: \n%@\n重定向【前】的请求地址: %@\n重定向【后】的请求地址: %@\n", urlResponse.statusCode, headers, [urlResponse URL], [request URL]);
return request;
}
@end
-
测试结果如下图:
NSURLConnection实现url重定向


