2016-06-26 2 views
4

Я делаю пост-запрос получения ответа responseObject, но в data formate .why его не придет в json формате.AFNetworking 3.0 не получает json из ответа

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
    manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    NSString *urlstr=[SERVER_API_URL stringByAppendingString:methodType]; 
    [manager POST:urlstr parameters:input progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     NSLog(@"success! data=%@",responseObject); 
     NSLog(@"responseObject==%@",responseObject); 

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSLog(@"error: %@", error); 
    }] 

;

здесь responseObject я получаю в NSLog

success! data=<227b2261 63636573 735f746f 6b656e22 3a224d58 31563255 736c3053 47367654 706f2d4d 76346459 672d3369 35684c4e 796d4245 4e674e4d 56574b5a 6c394476 3937536e 364a4e7a 3952524b 556d4f50 717a485f 7748416e 63675849 70626e43 35703647 4c4f324d 7a773761 6b366d4d 6c4b6465 36766d62 3769434a 4973336c 3544674a 74345a4f 48523338 786c5270 554a4e56 5762356c 39347067 72417978 34555a47 35376444 456a4c62 39394d4b 55517358 546a3933 3751614e 526f5073 4c437859 4b5a7a6e 79483533 4f553555 4266457a 6f396732 5f767262 31736278 58334174 63467072 4a674d70 45682d45 33613750 346d3344 2d64706a 5a575365 7a4a6155 74463256 5a463733 6c716c32 5933222c 22746f6b 656e5f74 79706522 3a226265 61726572 222c2265 78706972 65735f69 6e223a38 36333939 7d22> 

, когда я передаю запрос от клиента почтальона я получать все соответствующие данные. вот скриншот. enter image description here

+3

вместо 'manager.responseSerializer = [AFHTTPResponseSerializer serializer];' почему не использовать 'manager.responseSerializer = [AFJSONResponseSerializer serializer];' –

+0

Я использовал ma nager.responseSerializer = [AFJSONResponseSerializer serializer]; то я получил этот Error Domain = NSCocoaErrorDomain Code = 3840 «Текст JSON не начинался с массива или объекта, а опция позволяла не устанавливать фрагменты». UserInfo = {NSDebugDescription = текст JSON не начинался с массива или объекта и не позволял добавлять фрагменты.} @VivekMolkar –

+0

вы можете использовать '[AFJSONResponseSerializer serializerWithReadingOptions: NSJSONReadingAllowFragments];' вместо '[AFJSONResponseSerializer serializer]' –

ответ

2

Установить допустимые типы контента:

[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithArray:@[@"application/json"]]]; 

Затем поверните ответ на NSDictionary:

NSDictionary *response = responseObject; 
NSLog("api response: %@", response); 

Не забывайте обрабатывать любые ошибки.


Side Примечание: Если вы работаете с самоподписывающимся SSL, вы можете разрешить недействительные сертификаты по:

manager.securityPolicy.allowInvalidCertificates = YES; 
manager.securityPolicy.validatesDomainName = NO; 
+0

Я получаю это при ошибке этой ошибки Ошибка домена = NSCocoaErrorDomain Code = 3840 «Мусор в конце». UserInfo = {NSDebugDescription = Garbage at end.} –

+1

Тогда ваш JSON испорчен. Сначала проверьте ответ с открытым текстом. – emotality

5

Изменить код согласно ниже:

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 
//manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil]; 

NSString *urlstr=[SERVER_API_URL stringByAppendingString:methodType]; 
[manager POST:urlstr parameters:input progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
    NSLog(@"[success]: %@",responseObject); 

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
    NSLog(@"[error]: %@", error); 
}] 
+1

с версией 3.0, 'AFJSONResponseSerializer' по-прежнему не принимает ответ с MIME Type' application/json' – Raptor

+0

попробуйте мой обновленный ответ. – KKRocks

+0

Да, заменив '' 'manager.responseSerializer = [AFJSONResponseSerializer serializer];' '' '' '' manager.responseSerializer.acceptContentTypes = [NSSet setWithObjects: @ "application/json", @ "text/json", @ "text/javascript", @ "text/html", nil]; '' 'сделал трюк. – samthui7

Смежные вопросы