通过提取反应本机发布请求引发networking请求失败

我遇到了以下错误。 目前我正在开发一个带有React Native的Android应用程序,因此我打算使用fetch来为我发送一个post请求。

fetch("https://XXreachable-domainXX.de/api/test", { method: "post", body: JSON.stringify({ param: 'param', param1: 'param', }) } ) .then((response) = > response.json() ) . then((responseData) = > { ToastAndroid.show( "Response Body -> " + JSON.stringify(responseData.message), ToastAndroid.SHORT ) }) . catch((error) = > { console.warn(error); }) ; 

该应用程序现在抛出一个错误:

TypeError:networking请求失败

当我将代码更改为GET-Request时,它的工作正常,在浏览器中使用window.alert()作为返回它很酷,并且Chrome扩展邮局正确返回数据。

Solutions Collecting From Web of "通过提取反应本机发布请求引发networking请求失败"

这个React Native的错误是无用的,所以你需要首先得到实际的底层错误。 最直接的方法是编写一个小的本地程序,只使用HttpsURLConnection执行相同的查询。

对于我来说,实际的错误是java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 其中有一个众所周知的解决scheme: https : //developer.android.com/training/articles/security-ssl.html#MissingCa

考虑到浏览器和邮递员对请求没有任何问题,这很有可能是你的情况。 要检查它运行openssl s_client -connect XXreachable-domainXX.de:443 -showcerts 。 如果存在证书错误,请先修复它们,这可以节省您编写本机程序的时间。

编辑:其实最简单的方法来查看所有底层的Android错误的反应本地只是在terminal运行'adb logcat'

使用Windows OS / PHP内置服务器/ react-native Android开发设备:

  • 检查服务器本地IP地址( ipconfig ),例如172.16.0.10
  • 在react-native fetch使用这个URL和适当的端口( fetch('http://172.16.0.10:8000/api/foo)
  • 使用这个特定的IP而不是本地主机运行PHP内置的服务器: php -S 172.16.0.10:8000 ...
  • closures专用networking的Windows防火墙

这就解决了Android手机和本地服务器之间的连接问题。

如果你有这个错误,你确信一切正常你正在运行一个模拟器,只需closures你的模拟器,并再次启动。

它应该现在运行。

这通常发生在一段时间让系统hibernate之后

我有一个主要问题在android模拟器上做同样的事情。 在iOS上批准info.plist中的域名是必要的。 要清楚我正在尝试login到我的.NET Web托pipe的API。

解决办法是确保发布的数据是参数化的(我敢肯定,这是一个字)

 export const loginUser = ({ userName, password }) => { const data = `UserName=${userName}&Password=${password}&grant_type=password` return (dispatch) => { dispatch({ type: LOGIN_USER }) fetch(URL_LOGIN, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: data // body: { // UserName: userName, // Password: password, // grant_type: 'password' // } }) .then((response) => { loginUserSuccess(dispatch, response) }) .catch((response) => { loginUserFailed(dispatch, response) }) }; }; 

检查两个案件波纹pipe

  1. 错误的终点
  2. 互联网连接:真实设备,虚拟设备

它已经吃了2小时,第二个原因。

如果您在仿真器上遇到此问题,请确保您也在设备上进行testing。 这很可能不是那里发生的。

只要你知道,如果你能解决它,没有什么可担心的。

由于证书过期,我在Android上遇到了这个问题。 我得到的错误消息是com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certificate expired at Fri Sep 29 16:33:39 EDT 2017 (compared to Fri Dec 08 14:10:58 EST 2017)

我能够使用digicert.com确认这一点 。

不幸的是,我不得不深入研究React Native代码,并debugging包(index.android.bundle)中的XHR代码,以便find错误消息和URL,因为它在我的一些日志代码,我显然没有login到控制台。 🙂

我受到了这个GitHub问题评论的帮助。