我正在测试我过去 2 个月一直在开发的应用程序。基本上,它请求包含项目信息的 JSON。JSON 文件的一个字段是 image_url。当我想显示此图像时,我需要从另一台服务器下载它,这需要额外的凭据。
所以它是这样的-> 在我的 cellForRowAtIndexPath 中我正在做
NSDictionary *aucdict = [jsonAukResults objectAtIndex:indexPath.row];
NSURL *imageURL = [NSURL URLWithString:[aucdict objectForKey:@"img_url"]];
NSString *authPString = [[[NSString stringWithFormat:@"login:password"]dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];
NSString *verifPString = [NSString stringWithFormat:@"Image %@",authPString];
NSMutableURLRequest *Prequest = [[NSMutableURLRequest alloc] initWithURL:imageURL];
[Prequest setValue:verifPString forHTTPHeaderField:@"Authorization"];
NSError *error = nil;
NSURLResponse *resp = nil;
NSData *picresult = [NSURLConnection sendSynchronousRequest:Prequest returningResponse:&resp error:&error];
UIImage *imageLoad = [[UIImage alloc] initWithData:picresult];
现在,我只是隐藏了凭据(它们不是登录名:密码 :))。我的问题是,现在,我得到了 3 个项目。这 3 个项目都在同一台服务器上有图像。我可以使用此代码毫无问题地获得其中两个。但是第三个有问题,我总是得到 (NULL) imageLoad。在我的模拟器上,一切正常,我得到了所有 3 张图片。在真实设备上我得到错误。
我尝试使用错误和响应来连接 NSURLConnection,以便更好地进行调试。这是我在错误中得到的结果。
打印错误描述:
错误域 = NSURLErrorDomain 代码 = -1202 “此服务器的证书无效。您可能正在连接到一个假装是“服务器名称”的服务器,这可能会使您的机密信息面临风险。” UserInfo = 0x1e5a3080 {NSErrorFailingURLStringKey = pictureLink.jpg,NSLocalizedRecoverySuggestion = 您是否仍要连接到该服务器?,NSErrorFailingURLKey = pictureLink.jpg,NSLocalizedDescription = 此服务器的证书无效。您可能正在连接到一个假装是“服务器名称”的服务器,这可能会使您的机密信息面临风险。,NSUnderlyingError = 0x1e5a30e0 “此服务器的证书无效。您可能正在连接到一个假装是“服务器名称”的服务器,这可能会使您的机密信息面临风险。”,NSURLErrorFailingURLPeerTrustErrorKey =}
我不使用 SSL,所以我真的很困惑是什么导致了这个错误。顺便说一句,到目前为止一切都运行良好(这是我的初始屏幕,所以已经做了一个半月了)。现在我开始做图形,然后出现了这个问题 :(
答案1
我的朋友告诉我尝试在 URL 末尾添加“?”符号。我不明白为什么,但突然它就起作用了!有人能解释清楚为什么它有效吗?:) 谢谢
NSMutableString *modURL = [NSMutableString stringWithString:[aucdict objectForKey:@"img_url"]];
[modURL appendFormat:@"?"];
NSURL *imageURL = [NSURL URLWithString:modURL];