美文网首页需要读的资料
iOS中实现url重定向

iOS中实现url重定向

作者: yanhooIT | 来源:发表于2017-12-08 00:49 被阅读822次

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

重定向对应的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

相关文章

  • iOS中实现url重定向

    以京东为例,展示url重定向 修改前:http://www.360buy.com 修改后:https://www....

  • 微信公众号踩坑

    1:服务端返回一个url需要前端重定向到这个url,IOS上可以重定向,安卓不行

  • Apache URL重定向配置专题

    Url重定向机制简述 Rewrite url重定向就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式...

  • Nginx - rewrite模块深度学习

    1、Nginx的rewrite规则 作用:1、实现url重写与重定向。场景:1、URL访问跳转,支持开发设计。 ...

  • 优质文集

    iOS UIWebView URL拦截 实现网页过滤,URL拦截

  • nginx之rewrite重写

    一.什么是rewrite rewirte主要实现是url地址重写,以及重定向,就是把传入web的请求重定向到其它的...

  • Nginx Rewrite

    一:什么是rewrite rewrite是url重写,主要实现url地址重写,以及重定向,就是把传入web的请求重...

  • python接口自动化(十八)--重定向(Location)(详

    简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而...

  • Asp.Net Core Url Rewrite

    在《Asp.Net Core Url Redirect》中使用重定向解决Url问题,还是有些不理想:重定向的Url...

  • day11

    预备0.nginxRewrite 1.什么是rewriteRewrite主要实现url地址重写, 以及地址重定向,...

网友评论

    本文标题:iOS中实现url重定向

    本文链接:https://www.haomeiwen.com/subject/xbssixtx.html