Почему я получаю «Content-Length» с AFNetworking, а не с Alamofire? - PullRequest
0 голосов
/ 03 октября 2018

В Swift (Alamofire) я делаю этот код:

let url = URL(string: "http://cdn.thechivemobile.com.edgesuite.net/v5/chive/20117177/20117177_2_600_366.gif")!
let task = Alamofire.request(url)
task.downloadProgress() { (progress) in
    print("*** \(progress.completedUnitCount) \(progress.totalUnitCount)\n")
}

И progress.totalUnitCount всегда -1.

Но с этим кодом Objective C (AFNetworking):

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://cdn.thechivemobile.com.edgesuite.net/v5/chive/20117177/20117177_2_600_366.gif"]];
AFHTTPRequestOperation *httpOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

    NSLog(@"*** %@", @(((double)totalBytesRead) / ((double)totalBytesExpectedToRead)));
}];
[httpOperation start];

totalBytesExpectedToRead действительно.Я посмотрел на заголовки, и они немного отличаются.Код Objective C получает заголовки с Content-Length, а код Swift - нет.

1 Ответ

0 голосов
/ 04 октября 2018

Проблема была в том, что мне нужно было добавить «Accept-Encoding: gzip» для Alamofire.Мне не нужно было делать это с AFNetworking.

request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")

Кажется, что Akamai, вероятно, кэширует эти изображения как заархивированные объекты и распаковывает их перед загрузкой.Когда он делает это, он заранее не знает размер распакованного содержимого, поэтому он не включает «Content-Length».

...