React Native XMLHttpRequest request fails if ssl (https) certificate is not valid

后端 未结 3 387
轻奢々
轻奢々 2021-01-21 00:29

When i am doing XMLHttpRequest to https server with not valid certificate React Native throws exception \"The operation couldn’t be completed. (NSURLErrorDomain error -1202.)\"<

3条回答
  •  广开言路
    2021-01-21 00:52

    Disclaimer: This solution should be temporary and documented so that it won't stay in the production phase of the software, this is for development only.

    For iOS, all you have to do is, open your xcodeproject (inside your iOS folder in RN) once you have that open, go to RCTNetwork.xcodeproj and in that project, navigate to RCTHTTPRequestHandler.m

    In that file you will see a line like this:

     #pragma mark - NSURLSession delegate
    

    right after that line, add this function

    - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
    {
      completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
    }
    

    And voila, you can now make insecure calls to your API without a valid certificate.

    That should be enough, but if you are still having problems, you might need to go to your project's info.plist, left click on it and choose open as... source code.

    and at the end just add

    NSAppTransportSecurity
      
        NSAllowsArbitraryLoads
        
      
    

    so your file will look like this

        ...
        UISupportedInterfaceOrientations
        
            UIInterfaceOrientationPortrait
            UIInterfaceOrientationLandscapeLeft
            UIInterfaceOrientationLandscapeRight
        
        UIViewControllerBasedStatusBarAppearance
        
        NSLocationWhenInUseUsageDescription
        
      NSAppTransportSecurity
      
        NSAllowsArbitraryLoads
        
      
    
    
    

    For a real production ready solution, https://stackoverflow.com/a/36368360/5943130 that solution is better

提交回复
热议问题