HTTP 加载失败,我已经尝试了所有 SO 建议,但没有任何效果
HTTP load failed and I have tried all of the SO suggestions, but nothing works
根据 Apple 的 docs,错误 9802 是 "Fatal Alert"。我查看了 Google 和 SO,没有发现任何引用 9802 的内容可以解决此问题。我可以更改我的代码以获取 "apple.com" 并获得该页面,但是使用我自己的 URL,我得到上面的错误。我已经尝试了我能想到的一切,但没有任何效果。是时候寻求帮助了! :D
使用
的结果
/usr/bin/nscurl --ats-diagnostics https://pragerphoneapps.com
是否全部测试失败(结果已上传here)
这是我应用程序的 .plist 文件的图像(仅相关部分)
这是目标信息的图像:
这是我的代码:
- (IBAction)showHTMLHelp:(UIButton *)sender {
// make the popover
UIViewController* popoverContent = [UIViewController new];
UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 450, 500)];
popoverView.backgroundColor = [UIColor colorWithWhite:(CGFloat)1.0 alpha:(CGFloat)1.0]; // frame color?
popoverContent.view = popoverView;
//resize the popover view shown in the current view to the view's size
popoverContent.preferredContentSize = CGSizeMake(450, 500);
NSString *urlAddress = @"https://pragerphoneapps.com"; // @"https://www.pragerphoneapps.com/bookstore-inventory-manager/upload-help/";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
// add the UIWebView for RichText
UIWebView *webView = [[UIWebView alloc] initWithFrame: popoverView.frame];
webView.backgroundColor = [UIColor whiteColor]; // change background color here
// add the webView to the popover
[webView loadRequest:requestObj];
[popoverView addSubview:webView];
// if previous popoverController is still visible... dismiss it
if ([popoverController isPopoverVisible]) {
[popoverController dismissPopoverAnimated:YES];
}
//create a popover controller
popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
[popoverController presentPopoverFromRect:((UIButton *)oShowHelp).frame inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
我强烈建议您修复您的 SSL 证书。
ATS 要求您拥有有效的 SSL 证书、TLS 版本 1.2 或更高版本并支持前向保密。
这将是 2017 年初的要求,所以最好做好准备。
无论如何,同时尝试以下步骤以使其正常工作。
将此放在您的文件顶部:
@interface NSURLRequest (InvalidSSLCertificate)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end
在 Info.plist 中禁用应用程序传输安全。
加载请求前允许无效的 SSL 证书:
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
成功加载您网站的示例代码:
NSString *urlAddress = @"https://pragerphoneapps.com"; // @"https://www.pragerphoneapps.com/bookstore-inventory-manager/upload-help/";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
UIWebView *webView = [[UIWebView alloc] initWithFrame: self.view.frame];
webView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:webView];
[webView loadRequest:requestObj];
我想知道为什么它不能用于设置 "NSAllowArbitraryLoads to YES"。如果有缓存,请尝试重新启动您的 Mac 或 Xcode。
而且您的 "Exception Domains" 设置格式错误。
根据 Apple 的 docs,错误 9802 是 "Fatal Alert"。我查看了 Google 和 SO,没有发现任何引用 9802 的内容可以解决此问题。我可以更改我的代码以获取 "apple.com" 并获得该页面,但是使用我自己的 URL,我得到上面的错误。我已经尝试了我能想到的一切,但没有任何效果。是时候寻求帮助了! :D
使用
的结果/usr/bin/nscurl --ats-diagnostics https://pragerphoneapps.com
是否全部测试失败(结果已上传here)
这是我应用程序的 .plist 文件的图像(仅相关部分)
这是目标信息的图像:
这是我的代码:
- (IBAction)showHTMLHelp:(UIButton *)sender {
// make the popover
UIViewController* popoverContent = [UIViewController new];
UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 450, 500)];
popoverView.backgroundColor = [UIColor colorWithWhite:(CGFloat)1.0 alpha:(CGFloat)1.0]; // frame color?
popoverContent.view = popoverView;
//resize the popover view shown in the current view to the view's size
popoverContent.preferredContentSize = CGSizeMake(450, 500);
NSString *urlAddress = @"https://pragerphoneapps.com"; // @"https://www.pragerphoneapps.com/bookstore-inventory-manager/upload-help/";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
// add the UIWebView for RichText
UIWebView *webView = [[UIWebView alloc] initWithFrame: popoverView.frame];
webView.backgroundColor = [UIColor whiteColor]; // change background color here
// add the webView to the popover
[webView loadRequest:requestObj];
[popoverView addSubview:webView];
// if previous popoverController is still visible... dismiss it
if ([popoverController isPopoverVisible]) {
[popoverController dismissPopoverAnimated:YES];
}
//create a popover controller
popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
[popoverController presentPopoverFromRect:((UIButton *)oShowHelp).frame inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
我强烈建议您修复您的 SSL 证书。 ATS 要求您拥有有效的 SSL 证书、TLS 版本 1.2 或更高版本并支持前向保密。 这将是 2017 年初的要求,所以最好做好准备。
无论如何,同时尝试以下步骤以使其正常工作。
将此放在您的文件顶部:
@interface NSURLRequest (InvalidSSLCertificate)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
@end
在 Info.plist 中禁用应用程序传输安全。
加载请求前允许无效的 SSL 证书:
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
成功加载您网站的示例代码:
NSString *urlAddress = @"https://pragerphoneapps.com"; // @"https://www.pragerphoneapps.com/bookstore-inventory-manager/upload-help/";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
UIWebView *webView = [[UIWebView alloc] initWithFrame: self.view.frame];
webView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:webView];
[webView loadRequest:requestObj];
我想知道为什么它不能用于设置 "NSAllowArbitraryLoads to YES"。如果有缓存,请尝试重新启动您的 Mac 或 Xcode。 而且您的 "Exception Domains" 设置格式错误。