我使用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