我正在尝试缓存一个网页,稍后我可以使用 UIWebView 显示该网页。
我有相关的NSURLSessionDataTask
在另一个 NSURLSessionDataTask
的完成 block 内的 for 循环内(尝试缓存 6 个网页) .当我运行时,我不断收到此错误:
Ayy there was error downloading, data:<>
response:(null)
error:Error Domain=NSURLErrorDomain Code=-1002 "The operation couldn’t be completed. (NSURLErrorDomain error -1002.)" UserInfo=0xdd89d30 {NSUnderlyingError=0xdd89ba0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1002.)"}
这是我调用的片段
for (MAClass *class in [myDictResult objectForKey:@"classes"]) {
NSString *PRURL = [[[class assignments] objectAtIndex:[[class assignments] count]-1] assignmentName];
NSLog(@"PRURL is %@", PRURL);
NSURLSessionDataTask *progressReportTask = [defaultSession dataTaskWithURL:[NSURL URLWithString:PRURL] completionHandler:^(NSData *progressReportData, NSURLResponse *progressReportResponse, NSError *progressReportError) {
if ([progressReportData length] > 0 && progressReportError == nil) {
NSLog(@"got dat data");
} else NSLog(@"Error with getting data data:%@\nresponse:%@\nerror:%@", progressReportData, progressReportResponse, progressReportError);
}];
[progressReportTask resume];
NSLog(@"After request");
}
我已确保 URL 有效,看到这是导致其他人出现相同错误的原因(我的 url 类似于 https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4
,当我将它们放入浏览器时它们是有效的)
我做错了什么?
最佳答案
-1002 是 NSURLErrorUnsupportedURL
/kCFURLErrorUnsupportedURL
。以后你可以在 Xcode 文档中搜索 NSURLErrorDomain
或者使用快速打开(shift+command+O) 浏览 NSURLErrorDomain
定义的 header 。这两种技术都会让您发现 NSURLErrorDomain
中的 -1002 是 NSURLErrorUnsupportedURL
。
此错误的原因是您的 URL 包含一些必须进行百分比转义的字符。并且 Web 浏览器会经常为您执行必要的百分比转义,这就是它在那里工作的原因。
您可以使用 stringByAddingPercentEscapesUsingEncoding
将 URL 转换为可接受的格式:
NSString *urlString = @"https://mistar.oakland.k12.mi.us/novi/StudentPortal/Home/PrintProgressReport/20152193^HS4";
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLSessionTask *task = [defaultSession dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
...
}];
顺便说一句,在将 Web 浏览器结果与应用程序进行协调时,Charles非常有用。从浏览器运行请求,然后再次从应用程序运行请求,并在 Charles 中比较结果。如果您比较过这些,就会发现您需要对 URL 进行百分比转义。
对了,你也可以引用RFC 3986的section 2有关必须对 URL 中的哪些字符进行百分比转义的技术说明。
关于ios - NSURLErrorDomain 代码-1002 下载pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102304/