我知道有一些类似的问题,我一直坚持这一两天。我有一个项目,我使用ASIHTTPRequest对REST服务器执行POST和GET请求。一切工作正常,但由于ASIHTTPRequest开发已经停止,我打算将所有请求迁移到AFNetworking。事实上,我正在尝试它,但读取服务器响应似乎是其中一个参数(GST)没有被读取。将来自AsiHTTPRequest的POST请求转换为AFNetworking
的ASIHTTPRequest(工作正常):
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];
的AFNetworking请求(不工作):
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];
我注意到要添加两个引用“GST”,一个用于请求头“曲奇”和包含用于请求头“GST”用户令牌的另一个。这是你的意图吗?你不在你的ASI版本中执行这两个操作。 –
我尝试了很多东西,我只是复制了我从XCode获得的最后一个请求。 Cookie头应该可以完成这项工作,但它不会:/ –
* 3参考。我错过了作为GET参数传入的那个。也许你应该简化问题。找到最不起作用的最简单情况,然后试着弄清楚为什么不行。而不是仅仅添加“解决方案”和希望。 –