遇到的问题:实现AFNetWorking断点下载中,期待下载的文件大小和服务器返回的文件大小不一致。
具体的请求配置代码:
请求配置代码具体的请求开始响应的回调代码(可以在此处打印httpResponse查看响应头信息):
请求响应代码具体的请求HTTPHeaderField打印:
allHTTPHeaderField错误的HttpResponse打印:
HttpResponseError解决过程:
首先我在CompleteBlock回调内发现error对象不为空,打印error相关信息提示如下:
请求资源content-tyoe未定义发现这是一个常见错误。提示我们在发起请求时提供的content-type 《video/mp4》 是一个不能接受的类型。
解决办法:我这里是初始化一个AFHTTPResponseSerializer对象给了AFURLSessionManager对象,问题解决。
AFHTTPResponseSerializer *responseSeriallizer = [AFHTTPResponseSerializer serializer]; [manager setResponseSerializer:responseSeriallizer];
当然如果问题未解决也可以在AFJSONResponseSerializer这个类的初始化方法内 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];添加自己的媒体类型(已跑题)。
下面进入正题,我们遇到的根本问题是我们设置请求头的Content-Range未被服务器使用,导致我们期待下载的文件大小和服务器给我们返回的文件大小不一致。这个问题真是纠结了老半天;刚开始以为是后台下载接口的问题后来问了安卓那边回复没有问题😓。自己又是一通好找,没有在网上找到类似的经历。排除了response.expectedContentLength可以使用其他字段替换可能。于是考虑可能是服务器做了缓存处理、问了下后台、下载地址是别人的我们只是拿回URL使用,后台完全不懂😓😓😓。于是考虑我这边发送请求能不能告诉服务器忽略之前的缓存信息,使用每次请求我提供的最新的请求头信息。查找NSMutableURLRequest 发现有cachePolicy字段
cachePolicy值这里我使用了忽略本地和远程的缓存数据NSURLRequestReloadIgnoringLocalAndRemoteCacheData值来设置网络请求。PS:英文不好的可以翻译哦!!!😓😓😓😓
修改后的具体请求配置如下:
忽略请求头缓存搞定!如果您也遇到这个问题,希望这篇文章对您有帮助。谢谢!!喜欢记得点喜欢😍哦!!!😘。
网友评论