美文网首页
iOS AFN 和NSURLSession分别 获取重定向地址c

iOS AFN 和NSURLSession分别 获取重定向地址c

作者: MrPlusZhao | 来源:发表于2019-10-14 15:08 被阅读0次

工作中遇到了获取重定向URL地址的问题,网上AFN获取的文章比较少,所以打算记录一下.话不多说.直接上代码
Demo地址 (https://github.com/MrPlusZhao/RequestCode302URL.git)

1: NSURLSession 方法 (记得设置<NSURLSessionTaskDelegate>)

/// 用NSURLSession 获取重定向URL地址
重点是 willPerformHTTPRedirection 这个代理方法

- (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); 打开,block会有回调,不打开就没有回调,根据业务需求决定
}

2:AFN 获取重定向URL地址

重点是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;
        }
    }];
}

相关文章

  • iOS AFN 和NSURLSession分别 获取重定向地址c

    工作中遇到了获取重定向URL地址的问题,网上AFN获取的文章比较少,所以打算记录一下.话不多说.直接上代码Demo...

  • Cookie简介

    级别: ★☆☆☆☆标签:「iOS 」「Cookie简介」「AFN Cookie」「NSURLSession Co...

  • iOS 网络(3)——YTKNetwork

    【原文链接】 注意:在阅读本文之前建议先阅读《iOS 网络——NSURLSession》和《iOS 网络——AFN...

  • IOS AFN一套操作网络的第三方框架

    AFN框架的特点: NSURLConnection iOS2.0之后就有 NSURLSession iOS7.0之...

  • NSURLSession 概述

    主要参考:使用NSURLSession开发只懂 AFN ?搞定 NSURLSession 才是硬道理 想了解AFN...

  • AFN的瑕疵

    1.AFN 中的NSURLSession AFN 中的NSURLSession是最核心的类, 包含了网络请求最核心...

  • iOS AFN

    目前AFN3.x 是封装了NSURLSession的方法,所以了解AFN首先要学习NSURLSession。 NS...

  • AFN框架基本使用

    一、AFN内部结构 AFN结构体 NSURLConnection: NSURLSession 二、AFN的基本使用...

  • 重点 (十三) : AFN && ASI

    AFN什么是AFN全称是AFNetworking,是对NSURLConnection、NSURLSession的一...

  • AFNetworking

    AFN什么是AFN全称是AFNetworking,是对NSURLConnection、NSURLSession的一...

网友评论

      本文标题:iOS AFN 和NSURLSession分别 获取重定向地址c

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