Search code examples
objective-cuiwebviewnsurlconnectionios10nsurlrequest

HTTP load failed and I have tried all of the SO suggestions, but nothing works


Error 9802 is a "Fatal Alert" according to the Apple's docs. I have looked at Google and SO and found nothing referencing 9802 that fixes this problem. I can change my code to go for "apple.com" and I get the page, but using my own URL, I get the error above. I have tried everything that I can think of, and nothing works. Time to ask for help! :D

The result of using

/usr/bin/nscurl --ats-diagnostics https://pragerphoneapps.com

is all tests fail (results are uploaded here)

This is an image of my app's .plist file (only pertinent part)

enter image description here

and this is an image of the target info:

enter image description here

And this is my code:

- (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];

}


Solution

  • I seriously recommend you to fix your SSL certificate. ATS requires you to have a valid SSL certificate, TLS version 1.2 or above and support for forward secrecy. This will be a requirement at the beginning of 2017 so better get ready.

    Anyway, meanwhile try the following steps to get this working.

    Put this on top of your file:

    @interface NSURLRequest (InvalidSSLCertificate)
    + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
    + (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;
    @end
    

    Disable App Transport Security in Info.plist. enter image description here

    Allow invalid SSL certificates before loading request:

    [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
    

    Sample code that successfully loads your site:

    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];