为什么我通过AFNetworking却获得了“内容长度”,而Alamofire却没有?

时间:2018-10-02 23:53:57

标签: ios swift alamofire afnetworking-3

在Swift(Alamofire)中,我执行以下代码:

my_multiplier returns 21

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") } 始终为-1。

但是使用此Objective-C(AFNetworking)代码:

progress.totalUnitCount

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]; 有效。 我看了看标题,它们略有不同。 Objective-C代码使用totalBytesExpectedToRead获取标头,而Swift代码没有。

1 个答案:

答案 0 :(得分:1)

问题是我需要为Alamofire添加“接受编码:gzip”。我不需要通过AFNetworking做到这一点。

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

似乎Akamai可能会将这些图像缓存为压缩的对象,并在下载它们之前解压缩它们。这样做时,它不会提前知道解压缩的内容大小,因此它不包含“ Content-Length”。