2016-05-27 5 views
2

Wie kann ich diese veraltete Funktion aktualisieren, um AFNetworking 3.0 zu verwenden?AFNetworking 3.0 Migration für Umleitungsblock

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]; 

Antwort

10

Verwenden setTaskWillPerformHTTPRedirectionBlock auf AFHTTPSessionManager. Der Blocksatz wird aufgerufen, wenn die anfängliche URL-Anfrage umgeleitet wird. Sie haben die Möglichkeit, der Weiterleitung zu folgen oder die Weiterleitung im Block zu stoppen.

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); 
}]; 

Ich würde empfehlen, lesen Sie durch die AFNetworking 3.0 Migration Guide.

+0

AFNetworking 3.1.0 keine Fehlanzeige für die Umleitung-Block zu unterstützen scheint, so Es erwartet eine gültige URLRequest. Was ist der beste Weg, um die Umleitung abzufangen und zu verhindern, dass sie nicht umgeleitet wird? – Bocaxica

1

In einigen Fällen Sie den Header für die Anforderung einstellen müssen, stellen nur requestSerializerrequestSerializer setValue: forHTTPHeaderField: mit als Gebrüll:

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); 
}];