React Native-在获取非https URL时出现“网络请求失败”

时间:2018-08-12 14:13:22

标签: android react-native

将sdk版本更新为26后,获取非https URL失败。这仅在生产版本中发生。在开发模式下,一切正常。这是一段代码:

fetch('http://something.com/').then(
  r => {},
  e => console.error(e));

这会在logcat中产生以下内容:

08-12 19:08:47.555 14586 14623 E ReactNativeJS: [TypeError: Network request failed]

这是我的android/app/build.gradle文件:

android {
    compileSdkVersion 23
    buildToolsVersion "27.0.3"

    defaultConfig {
        ...

        minSdkVersion 16
        targetSdkVersion 26
        versionCode 28
        versionName "0.1.0"
    }

...
}

3 个答案:

答案 0 :(得分:1)

尝试使用其他http客户端,例如axios

答案 1 :(得分:0)

您可能需要向INTERNET添加AndroidManifest.xml权限。

赞:

<manifest xlmns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET" />
 <application ...
</manifest>

另一个原因可能是您的请求的标头中包含charset: utf-8。如果您对非拉丁服务器执行ping操作,则可能会出现问题。在这种情况下,您的服务器管理员需要更新他的nginx(或他用于网络服务的任何设置)设置以允许该标头。

最后但并非最不重要的问题可能是a virtual router

答案 2 :(得分:-1)

问题是,iOS在模拟器中运行,而Android在模拟器中运行。 本地主机指向运行代码的环境。仿真器仅在模拟设备时模拟真实设备。 因此,Android上的localhost指向仿真的Android设备。而不是运行服务器的计算机。 解决方案是用计算机的IP地址替换localhost。