需要读的资料

iOS中实现url重定向

2017-12-08  本文已影响822人  yanhooIT

以京东为例,展示url重定向

重定向对应的HTTP状态编码

iOS中实现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
#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
上一篇 下一篇

猜你喜欢

热点阅读