I'm using AFNetworking 2.0 in an iOS project, and I'm trying to build a GET request with some parameters, and intercept redirects.
I see the method -[AFHTTPRequestOperation setRedirectResponseBlock]
, which I'm using to grab the redirects and do something with them. But I don't see how to set the request parameters on that operation. Here's what that looks like:
AFHTTPRequestOperation *ballotOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
[ballotOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"in completion");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"in error");
}];
[ballotOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
if (redirectResponse == nil) {
return request;
} else {
NSLog(@"in redirect, blocking");
[ballotOperation cancel];
return nil;
}
}];
[[AFHTTPRequestOperationManager manager].operationQueue addOperation:ballotOperation];
I see AFHTTRequestOperationManager
has the method GET:parameters:success:failure:
in which you can set the parameters. But that starts the request immediately, not giving me a chance to set the redirect block on it.
I see some sample code out there from AFNetworking 1.x using AFHTTPClient
, but I don't want to go back!
How can I do what I'm trying to do?
The [AFHTTPRequestOperationManager GET...]
method in AFHTTPRequestOperationManager.m
is just a wrapper around creating a AFHTTPRequestOperation
object and adding it to the operationQueue. Using this as an example, you can accomplish what you are trying to do.
This is how the request is created in the GET
method of AFHTTPRequestOperationManager
:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:[[NSURL URLWithString:URLString relativeToURL:manager.baseURL] absoluteString] parameters:parameters error:nil];
where urlString
is a NSString representing the url, and parameters are an NSDictionary.
I believe the rest of your code should work, but just in case, here is how it is done in the GET
method (with your redirect block added as well):
AFHTTPRequestOperation *ballotOperation = [self HTTPRequestOperationWithRequest:request success:success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"in completion");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"in failure");
}];
[ballotOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
if (redirectResponse == nil) {
return request;
} else {
NSLog(@"in redirect, blocking");
[ballotOperation cancel];
return nil;
}
}];
[manager.operationQueue addOperation:ballotOperation];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With