【问题标题】:AFNetworking 3.0 migration for redirect blockAFNetworking 3.0 迁移重定向块
【发布时间】: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];

【问题讨论】:

    标签: ios objective-c afnetworking


    【解决方案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);
    }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-28
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多