Я использую sendSynchronousRequest: returnResponse: метод ошибки класса 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. Но в любом случае это потребует работы на стороне сервера. Клиентский хэш или подписывает сообщение, затем сервер проверяет. Вы упомянули, что не можете сделать это на стороне сервера, поэтому целостность не может быть гарантирована. –