3

在 iOS 中从 Amazon S3 下载文件时。间歇性 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 回答