Search code examples
iosobjective-chttpasihttprequestafnetworking-2

Translate POST request from AsiHTTPRequest to AFNetworking


I know that there are some similar questions, I have been stuck on this for a couple of days. I had a project where I was using ASIHTTPRequest to perform POST and GET requests against a REST server. Everything works fine, but since ASIHTTPRequest development has been discontinued, I was planning to migrate all the requests to AFNetworking. Indeed, I'm trying it but reading the server response it seems like one of the parameters (GST) is not being read.

The ASIHTTPRequest (which works fine):

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:[[NSString stringWithFormat:@"%sexteriorroute/listall", KServerUrl] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
[request addRequestHeader:@"Content-Type" value:@"application/json;charset=UTF-8"];
[request addRequestHeader:@"Cookie" value:[NSString stringWithFormat:@"GST=%@", [user getToken]]];
[request setRequestMethod:@"POST"];
[request setPostBody:[NSMutableData dataWithData:[[NSString stringWithFormat:@"{\"filters\":\"{\\\"type\\\":\\\"FastFilter\\\",\\\"groups\\\":[{\\\"groupOp\\\":\\\"AND\\\",\\\"rules\\\":[{\\\"field\\\":\\\"lang\\\",\\\"op\\\":\\\"eq\\\",\\\"data\\\":\\\"%@\\\"}]}],\\\"rules\\\":[],\\\"groupOp\\\":\\\"AND\\\"}\"}", [user getLang]] dataUsingEncoding:NSUTF8StringEncoding]]];
[request setDelegate:self];
[request setDidFailSelector:@selector(getExteriorRoutesPreviewFailed:)];
[request setDidFinishSelector:@selector(getExteriorRoutesPreviewFinished:)];
[request startAsynchronous];

The AFNetworking request (which doesn't work):

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:[NSString stringWithFormat:@"%sexteriorroute/listall", KServerUrl] parameters:[NSDictionary dictionaryWithObject:[user getToken] forKey:@"GST"] error:nil];
[request setHTTPShouldHandleCookies:NO];
[request setValue:[NSString stringWithFormat:@"GST=%@", [user getToken]] forHTTPHeaderField:@"Cookie"];
NSData *postBody = [self base64DataFromString:[NSString stringWithFormat:@"{\"filters\":\"{\\\"type\\\":\\\"FastFilter\\\",\\\"groups\\\":[{\\\"groupOp\\\":\\\"AND\\\",\\\"rules\\\":[{\\\"field\\\":\\\"lang\\\",\\\"op\\\":\\\"eq\\\",\\\"data\\\":\\\"%@\\\"}]}],\\\"rules\\\":[],\\\"groupOp\\\":\\\"AND\\\"}\"}", [user getLang]]];
[request addValue:@"application/json;UTF-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:[NSString stringWithFormat:@"%@",[user getToken]] forHTTPHeaderField:@"GST"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postBody];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"Error: %@", operation.responseString);
}];
[operation start];

Solution

  • Well, finally i got it. It was a problem related with mixing AFNetworking and ASIHTTP. The AFNetworking request itself was fine.

    It seems that after login on the backend system using an ASIHTTP request, requests that were using AFNetworking didn't work well. Don't know really why, but using only AFNetworking requests solved the problem.

    Thanks to everyone =)