AFNetworking无法序列化gzipped响应(响应对象为零)

时间:2015-05-26 08:31:10

标签: ios objective-c afnetworking afnetworking-2

我正在使用AFNetworking下载.gzip文件,在未压缩时应该返回一个JSON字符串。我通过浏览器发出了get请求,下载了.gzip文件,解压缩后,会检索相应的JSON。

我知道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序列化器,则响应对象不是nil。但是,它是_NSInlineData类,它是一个未记录的类。

2 个答案:

答案 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序列化程序];

答案 1 :(得分:0)

在我的情况下,我使用AFHTTPSessionManager并且在没有使用AFgzipRequestSerializer解码响应的情况下工作正常。