我使用sendSynchronousRequest:returningResponse:NSURLConnection类的错误方法从网络获取NSData。如何在使用NSURLConnection sendSynchronousRequest时检查数据完整性?
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
我想要做的是检查返回值是否有效。 因此,我所做的是将响应头中的数据长度与期望长度进行比较,如下所示。
NSData *urlData;
do {
urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if ([urlData length] != [response expectedContentLength]) {
NSLog(@"WTF!!!!!!!!! NSURLConnection response[%@] length[%lld] [%d]", [[response URL] absoluteString], [response expectedContentLength], [urlData length]);
NSHTTPURLResponse *httpresponse = (NSHTTPURLResponse *) response;
NSDictionary *dic = [httpresponse allHeaderFields];
NSLog(@"[%@]", [dic description]);
}
} while ([urlData length] != [response expectedContentLength]);
但是,我不知道是否足以确保返回的数据的完整性。 我无法检查远程服务器上文件的校验和。
你能分享你的经验或其他提示?
谢谢。
您正在检查数据的长度,而不是完整性。根据完整性对您的重要性,您可以实施基于哈希的算法或更复杂的消息签名,或使用HTTPS。但无论如何,这需要一些服务器端的工作。客户端散列或签名消息,然后服务器检查。你提到你不能在服务器端这样做,所以不能保证完整性。 – 2012-03-20 16:21:19