2015-05-26 139 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来解码响应。