Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果ssl(https)证书无效,React本机XMLHttpRequest请求将失败_Javascript_Ios_React Native - Fatal编程技术网

Javascript 如果ssl(https)证书无效,React本机XMLHttpRequest请求将失败

Javascript 如果ssl(https)证书无效,React本机XMLHttpRequest请求将失败,javascript,ios,react-native,Javascript,Ios,React Native,当我使用无效证书对https服务器执行XMLHttpRequest时,React Native抛出异常“操作无法完成。(NSURlerErrorDomain错误-1202)。” 是否可以禁用React Native XMLHttpRequest的ssl警告/检查?据我所知,您也不能在web XHR中执行此操作,因此React Native不会公开它。我已经检查了源代码,似乎证实了这一点。这是因为iOS 9(以及8.4)中的新应用程序传输安全(ATS)功能。ATS已到位,确保您的应用程序符合安全连

当我使用无效证书对https服务器执行XMLHttpRequest时,React Native抛出异常“操作无法完成。(NSURlerErrorDomain错误-1202)。”


是否可以禁用React Native XMLHttpRequest的ssl警告/检查?

据我所知,您也不能在web XHR中执行此操作,因此React Native不会公开它。我已经检查了源代码,似乎证实了这一点。

这是因为iOS 9(以及8.4)中的新应用程序传输安全(ATS)功能。ATS已到位,确保您的应用程序符合安全连接的最佳实践。如果您遇到此错误,这意味着您没有使用安全连接,您应该对此采取措施

但是,您可以通过编辑应用程序的Info.plist文件来覆盖默认行为

您可以设置许多不同的标志,这些标志都在中介绍

让您同时关闭ATS的最简单修改如下:

  • 在Xcode中打开您的项目
  • 在左侧,列出了项目的所有文件,搜索Info.plist
  • 右键单击该文件并选择
    openas>sourcecode
  • 将以下代码添加到第一个
    标记下
  • 如果你打算发布你的应用程序,你真的不应该把它留在这里

    <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
        </dict>
    
    NSAppTransportSecurity
    NSAllowsArbitraryLoads
    
    免责声明:此解决方案应该是临时的,并有文档记录,这样它就不会停留在软件的生产阶段,这仅用于开发

    对于iOS,您所要做的就是打开您的xcodeproject(在RN中的iOS文件夹中),打开后,转到RCTNetwork.xcodeproj,并在该项目中导航到RCTHTTPRequestHandler.m

    在该文件中,您将看到如下行:

     #pragma mark - NSURLSession delegate
    
    在该行之后添加此函数

    - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
    {
      completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
    }
    
    瞧,您现在可以在没有有效证书的情况下对API进行不安全的调用

    这应该足够了,但如果您仍然有问题,您可能需要转到项目的info.plist,左键单击它并选择open as。。。源代码

    最后再加上

    <key>NSAppTransportSecurity</key>
      <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
      </dict>
    
    NSAppTransportSecurity
    NSAllowsArbitraryLoads
    
    所以你的文件看起来像这样

        ...
        <key>UISupportedInterfaceOrientations</key>
        <array>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationLandscapeLeft</string>
            <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
        <key>UIViewControllerBasedStatusBarAppearance</key>
        <false/>
        <key>NSLocationWhenInUseUsageDescription</key>
        <string></string>
      <key>NSAppTransportSecurity</key>
      <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
      </dict>
    </dict>
    </plist>
    
    。。。
    UI支持接口方向
    
    该解决方案更好

    您可以在浏览器中添加异常,但不能在RNSo中添加异常。是否有不忽略错误的解决方案?fetch api是否支持TLS 1.2?您是否考虑过使用
    fetch
    而不是XHR?我正在链接的类似帖子的可能副本已被升级,并且已被收藏,因此我投票支持关闭此帖子。我在那里贴了一个答案,应该会有帮助!对于上述问题,有没有Android的等效解决方案?