从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框架搞砸了。
答案 0 :(得分:0)
所以它是RequestTimeTooSkewed错误,上面的代码从S3服务器的头响应中获取日期以添加请求就可以了。