3

iOSでAmazonS3からファイルをダウンロードしているとき。断続的にNSURLConnectionDownloadDelegateのメソッドdidFailWithError:呼び出されます。これは、受信したNSErrorオブジェクトをログに記録したときに取得したものです。

エラーコード:109エラードメイン:SSErrorDomainエラーの説明:「。s3.amazonaws.comに接続できません」

すべてのAppleドキュメント、StackOverflow、およびその他のサイトを検索しましたが、これについては何も見つかりませんでした。今日、私は自分の開発者アカウントを使用して、これについてもAppleに技術的な質問をしました。

何か案が ?

アップデート:

それで、HTTP応答エラーコード(403 Forbidden)を調べた後、私はその考えを思いつきました。これは、S3からの「RequestTimeTooSkewed」エラーが原因です(要求時間と現在の時間の差が大きすぎます)。iPad / Macのシステム時間を1時間変更してクロスチェックしましたが、小さな(200kb)ファイルであっても、このエラーはすぐに発生します。

多くのブログで提案されているように、私は最初に以下のようにAWSにHEADリクエストを送信して、日付文字列を取得し、システムの日付を渡さないようにしています

NSString *awsURL = @"http://s3.amazonaws.com";
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:awsURL]];  
    [request setHTTPMethod:@"HEAD"];  

    NSHTTPURLResponse *response;  
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];  

    NSString *dateString = nil;  

    if ([response respondsToSelector:@selector(allHeaderFields)]) {  
        dateString = [[response allHeaderFields] objectForKey:@"Date"];  
    }   
    return dateString;

これをNSMutableURLRequestのDateヘッダーとして設定します

[urlRequest setValue:awsDateString forHTTPHeaderField:@"Date"];

このリクエストをダウンロード用に問題に追加しています

 NKAssetDownload *nkAssetDownload = [nkIssue addAssetWithRequest:urlRequest];

それでも同じエラー!!!! 今では私の前回の状況よりもクレイジーになっています。

誰 ?

アップデート2

日付文字列の「GMT」を「+0000」に置き換えることで、リクエストを正常に行うことができました(iPadのシステムクロックが正しくない場合でも)。

アップデート3それでもいくつかのリクエストは同じエラーで失敗しますが、これは奇妙なことですが、NewsStandフレームワークが混乱しているものだと思います。

4

1 に答える 1

0

したがって、RequestTimeTooSkewedエラーであり、リクエストを追加するためにS3サーバーのヘッドレスポンスから日付をフェッチする上記のコードがトリックを実行します。

于 2012-07-18T04:01:54.100 に答える