AFNetworking no puede reanudar las descargas cuando se establece "Content-Encoding: gzip"

Estoy usando AFNetworking2 para download files de mi cubo AWS S3. Todo funciona bien, excepto cuando configuro Content-Encoding: gzip para los files. AFNetworking no puede download la respuesta de contenido parcial que vuelve del server y me da el siguiente error:

Error Domain = NSURLErrorDomain Code = -1015 "no puede decodificar datos sin procesar" UserInfo = 0x10d2d8ce0 {NSUnderlyingError = 0x10d1ace80 "no puede decodificar datos sin formatting", NSErrorFailingURLStringKey = http://s3.amazonaws.com/awdtest/fullzip.pdf , NSErrorFailingURLKey = http: //s3.amazonaws.com/awdtest/fullzip.pdf , NSLocalizedDescription = no puede descifrar datos sin formatting}

Sin embargo, cuando elimino los metadatos "Content-Encoding: gzip" de mi file, funciona bien. Sé que mi server admite la request de range y lo he probado utilizando otros methods y funcionó bien.

aquí está la respuesta HTTP de mi server:

HTTP / 1.1 200 OK

x-amz-id-2: k5b65TtAgrD5Cn3N2aixCCdi6qAmg4j9iuOSNaO0uMRKLHPTQ + DMaA20u9j1CNzA

x-amz-request-id: 7AE5A7DD81ED2B88

Fecha: viernes 16 de mayo de 2014 04:45:17 GMT

Content-Encoding: gzip

Última modificación: viernes 16 de mayo de 2014 04:44:51 GMT

ETag: "88bbe0b318bf11dd56a31176d3384e78"

Accept-Ranges: bytes

Content-Type: application / pdf

Longitud del contenido: 1243325

Servidor: AmazonS3

Aquí están los files de ejemplo que estoy usando:

https://s3.amazonaws.com/awdtest/full.pdf

https://s3.amazonaws.com/awdtest/fullzip.pdf (gzipped y tiene Content-Coding configurada para gip)

Le agradecería que alguien me ayudara con este problema.

PS: Ya he probado los siguientes y todavía no funciona

[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; [request setValue:@"deflate" forHTTPHeaderField:@"Accept-Encoding"]; [request setValue:@"gzip, deflate" forHTTPHeaderField:@"Accept-Encoding"]; 

Use Wireshark para ver el cuerpo http de recevied.

Podría ser el responseSerializer que utilizó no puede analizar los datos sin procesar.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Ok, no estoy seguro de cómo vas a download esto o cuál es tu propósito. Por lo tanto, supongo que está utilizando las API de iOS 7, específicamente un AFHTTPSessionManager, y está buscando los datos brutos del file. Dado eso, escribí un serializador de datos para usar, y luego el código real es muy corto:

Serializador (algo raro):

 @interface FFDataResponseSerializer : AFHTTPResponseSerializer @end @implementation FFDataResponseSerializer - (instancetype)init { self = [super init]; if (!self) { return nil; } self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/pdf", nil]; return self; } - (id)responseObjectForResponse:(NSURLResponse *)response data:(NSData *)data error:(NSError *__autoreleasing *)error { if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { return nil; } return data; } @end 

Y luego, en mi código:

 NSURLSessionConfiguration *aURLSessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; aURLSessionConfiguration.HTTPAdditionalHeaders = @{@"Accept-Encoding": @"gzip, deflate", @"Accept": @"application/pdf"}; AFHTTPSessionManager *urlManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:aURLSessionConfiguration]; urlManager.responseSerializer = [FFDataResponseSerializer serializer]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://s3.amazonaws.com/awdtest/fullzip.pdf"]]; NSURLSessionDataTask *dataTask = [urlManager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"error: %@", error); } else { NSLog(@"response: %@, responseObject: %@", response, responseObject); // responseObject is your NSData Object with the PDF data inside of it. } }]; [dataTask resume]; 

Obviamente, querrás manejar errores, mantener las variables que quieras reutilizar, etc., etc.