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 迁移重定向块的主要内容,如果未能解决你的问题,请参考以下文章