我遇到了以下错误。 目前我正在开发一个带有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扩展邮局正确返回数据。
这个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开发设备:
ipconfig
),例如172.16.0.10 fetch
使用这个URL和适当的端口( fetch('http://172.16.0.10:8000/api/foo)
) php -S 172.16.0.10:8000 ...
这就解决了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
它已经吃了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问题评论的帮助。