ios - NSURLErrorDomain 代码-1002 下载pdf

标签 ios objective-c uiwebview nsurlsession

我正在尝试缓存一个网页,稍后我可以使用 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/

相关文章:

ios - 从 viewDidLoad 更改时,UIView 位置不遵守 NSLayoutConstraint

ios - 如何获得在不同 iPhone 模拟器中使用自动布局的 scrollView 实际大小

iphone - 如何从 Google plus(如 facebook)获取用户的帖子和更新

ios - UIWebView 中的文本在设备旋转时改变大小或重量

ios - Xcode 警告符号 - 带有白色圆圈的黄色三角形?

ios - 使用无人值守的 xcodebuild 管理钥匙串(keychain)以协同设计 macOS/iOS 应用程序

ios - 当用户想要在从一个选项卡导航到另一个选项卡时不自动刷新时如何刷新 webViewController

ios - 快速创建网页缩略图

ios - SKNode 子类中的 __stack_chk_fail

ios - 当应用程序关闭时 NSURLCache 被清空