2015-07-10 3 views
0

Я знаю, что есть некоторые подобные вопросы, я застрял на этом пару дней. У меня был проект, в котором я использовал ASIHTTPRequest для выполнения запросов POST и GET на сервере REST. Все работает нормально, но поскольку ASIHTTPRequest была прекращена, я планировал перенести все запросы на AFNetworking. В самом деле, я пытаюсь, но, читая ответ сервера, кажется, что один из параметров (GST) не читается.Перевести запрос POST от AsiHTTPRequest к 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]; 
+0

Я заметил, что вы добавляете две ссылки на «GST», один для заголовка запроса «Cookie» и другой, содержащий маркер пользователя для запроса заголовка «GST». Это то, что вы намеревались? Вы не делаете оба в своей версии ASI. –

+0

Я пробовал много вещей, и я просто скопировал последний запрос, который я получил от XCode. Заголовок Cookie должен выполнять эту работу, но он просто не делает:/ –

+0

* 3 ссылки. Я пропустил тот, который вы передаете как параметр GET. Возможно, вам стоит упростить эту проблему. Найдите самый простой случай, когда он не работает, а затем попытайтесь выяснить, почему это не так. Вместо того, чтобы просто добавлять «решения» и надеяться. –

ответ

0

Ну, наконец то я понял. Это была проблема, связанная с микшированием AFNetworking и ASIHTTP. Сам запрос AFNetworking был в порядке.

Похоже, что после входа в систему с использованием запроса ASIHTTP запросы, которые использовали AFNetworking, не работали хорошо. Не знаю, почему, но использование только запросов AFNetworking решило проблему.

Спасибо всем =)

0

Вы пробовали этот

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
NSDictionary *parameters = @{@"foo": @"bar"}; 
[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
Смежные вопросы