sendSynchronousRequest:returningResponse:NSURLConnectionクラスのerrorメソッドを使用して、ネットワークから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を実装できます。しかしいずれにしても、サーバ側の作業が必要になります。クライアントはメッセージをハッシュまたは署名し、サーバーがチェックします。あなたはサーバー側でそうすることはできないと述べたので、完全性を保証することはできません。 –