AFNetworking 3.0 迁移重定向块

Posted

技术标签:

【中文标题】AFNetworking 3.0 迁移重定向块【英文标题】:AFNetworking 3.0 migration for redirect block 【发布时间】:2016-05-27 15:42:03 【问题描述】:

如何更新这个已弃用的功能以使用 AFNetworking 3.0?

AFHTTPRequestOperation *requestOperation=[[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_URLString]]];
    [requestOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) 
        if (redirectResponse) 
            //this is the redirected url
            NSLog(@"%@",request.URL);
        
        return request;
    ];
    [requestOperation start];

【问题讨论】:

【参考方案1】:

AFHTTPSessionManager 上使用setTaskWillPerformHTTPRedirectionBlock。如果初始 URL 请求重定向,则将调用块集。您可以选择跟随重定向,或在块中停止重定向。

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest * _Nonnull(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLResponse * _Nonnull response, NSURLRequest * _Nonnull request) 
    NSLog(@"%@", request.URL);
    // This will be called if the URL redirects
    return request; // return request to follow the redirect, or return nil to stop the redirect
];
[manager GET:_URLString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) 
    NSLog(@"Response: %@", responseObject);
 failure:^(NSURLSessionTask *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

我建议您通读AFNetworking 3.0 Migration Guide。

【讨论】:

AFNetworking 3.1.0 似乎不支持重定向块的零返回,因此它需要一个有效的 URLRequest。拦截重定向并防止它不执行重定向的最佳方法是什么? @Bocaxica 您是否发现在使用 AFNetworking 3.x 时拦截重定向并防止其不执行重定向的最佳方法是什么 @SSuman99 是的,而不是return nil 我只是将URLRequest 返回到Associated Domain (developer.apple.com/documentation/security/password_autofill/…)。【参考方案2】:

在某些情况下,您需要为请求设置标头,只需使用requestSerializer setValue: forHTTPHeaderField: 设置requestSerializer 如下:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[manager setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest * _Nonnull(NSURLSession * _Nonnull session, NSURLSessionTask * _Nonnull task, NSURLResponse * _Nonnull response, NSURLRequest * _Nonnull request) 
    NSLog(@"%@", request.URL);
    // This will be called if the URL redirects
    return request; // return request to follow the redirect, or return nil to stop the redirect
];
[manager GET:_URLString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) 
    NSLog(@"Response: %@", responseObject);
 failure:^(NSURLSessionTask *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

【讨论】:

以上是关于AFNetworking 3.0 迁移重定向块的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 3.0迁移指南

AFNetworking 3.0迁移指南

AFNetworking 3.0迁移指南

AFNetworking 新版本3.0的迁移

AFNetworking 3.0迁移指南

Afnetworking 3.0 迁移:如何使用 xml 帖子正文发布