我正在使用AFNetworking并非常喜欢它。 我需要从我的服务器获取JSON数据,没关系,它完美无缺。
我添加了setDownloadProgressBlock,但我认为它无法与JSON下载一起使用:可能无法获得要下载的估计字节数。
我的代码:
NSMutableURLRequest *request = [[VinocelaHTTPClient sharedClient] requestWithMethod:@"GET" path:@"ws/webapp/services/pull" parameters:nil];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
{
}];
[operation setDownloadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
NSLog(@"Get %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation start];
我的结果:
得到27129个-1字节
获取127481的-1个字节
获得176699的-1个字节
所以,我认为AFNetworking无法估计下载JSON数据时的实际尺寸,而不是zip文件或图像?
答案 0 :(得分:2)
通过仔细阅读源代码,似乎进程回调只是传递了缓存的内部expectedContentLength
对象的NSHTTPURLResponse
属性。因此,如果由于某种原因,您的服务器未正确发送Content-Length
标头,和/或正在进行分块传输编码,则该值未知,并返回值NSURLResponseUnknownLength
(恰好是定义为-1)。
尝试检查应用上下文之外的HTTP请求返回的标头。如果您获得具有合理值的Content-Length
标头,则问题可能在于AFNetworking本身。如果不存在,问题在于服务器。我从来没有见过HTTP服务器使用分块传输编码发送JSON响应(大多数情况下内容大小应该相对较小并且在发送标头时已知),但是这样做是符合规范的。 / p>