2016-05-27 4 views
2

Как обновить эту устаревшую функцию для использования AFNetworking 3.0?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]; 

ответ

10

Использование setTaskWillPerformHTTPRedirectionBlock на AFHTTPSessionManager. Набор блоков будет вызываться, если первичный 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.

+0

AFNetworking 3.1.0, кажется, не поддерживает нулевую отдачу для переназначения блока, так он ожидает действительного URLRequest. Каков наилучший способ перехвата перенаправления и предотвращения его перенаправления? – Bocaxica

1

В некоторых случаях вам нужно установить заголовок запроса, просто установите requestSerializer используя requestSerializer setValue: forHTTPHeaderField: как ниже:

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); 
}]; 
Смежные вопросы