2015-05-26 6 views
1

Я использую AFNetworking для загрузки файла .gzip, который, когда несжатый должен возвращать строку JSON. Я сделал запрос на получение через мой браузер, загрузился файл .gzip, и при распаковке извлекается соответствующий JSON.AFNetworking не может сериализовать gzip-ответ (объект ответа равен нулю)

Я знаю, что AFNetworking построена на NSURLConnection, и из того, что я прочитал, NSURLConnection имеет встроенный в нее инфляцию gzip. Однако я не могу распаковать и разобрать файл gzip, возвращенный сервером, в JSON. Объект ответа из AFNetworking остается равным нулю. Мой код выглядит следующим образом:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
[manager.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"application/x-gzip", nil]; 


[manager GET:[NSString stringWithFormat:@"%@%@", BASE_URL, GET_CONTENTS_URL] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    if(responseObject == nil){ 
     NSLog(@"Response is still nil"); 
    } 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

Я не уверен, почему это не работает.

Примечание 1: Однако, если я заменил сериализатор ответа на сериализатор AFHTTPResponse, объект ответа не равен нулю. Однако это класс _NSInlineData, который является недокументированным классом.

+0

У меня такая же проблема. Будет опубликовать что-нибудь, если я найду решение. –

ответ

1

У меня была такая же проблема. Наконец, я получаю работу с помощью AFgzipRequestSerializer.

Вам необходимо использовать «AFgzipRequestSerializer».

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
    manager.requestSerializer = [AFgzipRequestSerializer serializerWithSerializer:[AFJSONRequestSerializer serializer]]; 
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

0

В моем случае я использую AFHTTPSessionManager, и он отлично работал, не используя AFgzipRequestSerializer для декодирования ответа.

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