在 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 框架搞砸的事情。