2015-05-26 88 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來解碼響應。