AFX2B;JSON+;进度下载

AFX2B;JSON+;进度下载,json,afnetworking,Json,Afnetworking,我正在使用AFN网络,非常喜欢它。 我需要从我的服务器获取JSON数据,这很好,它工作得很好 我添加了setDownloadProgressBlock,但我认为它不能与JSON下载一起工作:可能无法获得要下载的估计字节数 我的代码: NSMutableURLRequest *request = [[VinocelaHTTPClient sharedClient] requestWithMethod:@"GET" path:@"ws/webapp/services

我正在使用AFN网络,非常喜欢它。 我需要从我的服务器获取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];
我的结果是:

获取-1字节中的27129个

获取-1字节中的127481个

获取-1字节中的176699个


因此,我认为AFNetworking无法估计下载JSON数据时与zip文件或图像相反的实际大小?

仔细阅读源代码,似乎进度回调只是传递了缓存的内部
NSHTTPURLResponse
对象的
expectedContentLength
属性。因此,如果出于某种原因,您的服务器没有正确发送
内容长度
标头,和/或正在进行分块传输编码,则该值未知,并返回值
nsurresponseunknownlength


尝试在应用程序上下文之外检查HTTP请求返回的头。如果您得到的
Content-Length
头具有一个合理的值,那么问题可能在于AFNetworking本身。如果没有,问题在于服务器。我从未见过HTTP服务器使用分块传输编码发送JSON响应(大多数情况下,内容大小应该相对较小,并且在发送头时就知道了),但它这样做符合规范。

OK。我打印响应标题,但内容长度不存在。你说得对。我正在服务器上使用Rails 3。我将尝试找出它不存在的原因,并可能将它强制放在Rails或类似的东西中。我在Rails配置中添加了这个:config.middleware.use Rack::ContentLength。但结果很奇怪:“内容长度”=2658;=>获取2658个字节中的176699个。我确信JSON的字节数超过了2658个…听起来内容长度的不匹配可能与完整大小和gzip大小之间的差异有关。不确定这是否有帮助。。。