我正在下载文件(使用 apache tomcat 6.0.32)。当我断开连接(关闭 tomcat)时,有时 ASHITTPRequest 会产生错误,但有时(大多数情况下完全正确...所有时间完全正确!只有在开始时没有连接时才会发生错误)它会像所有正确的一样结束工作。
所以有一个问题:为什么会发生这种情况,如果连接正确丢失,我该如何查看。
非常感谢!
更新:
尝试通过 TCPMon 发送请求,然后停止它(TCPMon)并得到相同的结果: ASIHTTPRequest 认为下载正确完成。
更新:
响应头:
"Content-Disposition" = attachment;
"Content-Length" = 2277888;
"Content-Type" = "application/octet-stream";
Date = "Thu, 28 Apr 2011 12:35:32 GMT";
Server = "Apache-Coyote/1.1";
"Set-Cookie" = "JSESSIONID=98CAE6C0C4275B528D5E0F8651546AFE; Path=/ISED";
响应状态消息:
HTTP/1.1 200 OK
更新:
如果手动断开计算机(断开电缆)并得到这个:
有时 ASIHTTPRequest 会等到超时,然后下一个请求会出现连接错误。
有时错误发生在我断开连接的时候。
有时错误不会及时发生我断开连接:下载进度丢失并且(如果再次建立连接)文件从头开始下载。
如果关闭端口 ASIHTTPRequest 认为下载成功。
看不懂这个逻辑。。。
解决方案:
我通过比较标头中的 Content-Length 和读取的总字节数来解决问题:
NSString *contentLength = [[self.request responseHeaders] valueForKey:@"Content-Length"];
NSString *downloadedBytesCount = [NSString stringWithFormat:@"%llu",[self.request totalBytesRead]];
if ([contentLength isEqualToString:downloadedBytesCount] == NO) {
// error maintain
}
所以我可以检查我是否得到了所有数据,如果没有:保持错误。在其他情况下(如手动断开连接)ASIHTTPRequest 以适当的方式工作并自行生成错误。