通过Fetch反应本机发布请求引发网络请求失败
我遇到了以下错误。 目前我正在开发一个带有React Native的Android应用程序,因此我打算使用提取功能来为我提供发布请求。当我修改代码,一个GET请求it's做工精细,在浏览器中使用window.alert()作为返回通过Fetch反应本机发布请求引发网络请求失败
TypeError: Network request failed
:
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);
})
;
的应用程序现在抛出一个错误这很酷,而且Chrome扩展邮差正确返回数据。
对此做出何种反应原住民的错误是没有用处,那么您需要首先获得实际的潜在错误。最简单的方法是编写一个小型的本地程序,它只需使用HttpsURLConnection
执行相同的查询。
对我来说,真正的错误是java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
其中有一个众所周知的解决方案:https://developer.android.com/training/articles/security-ssl.html#MissingCa
这是很可能的情况下,也考虑到浏览器和邮差有请求没有问题。检查它运行openssl s_client -connect XXreachable-domainXX.de:443 -showcerts
。如果存在证书错误,请先修复它们,这可以节省您编写本机程序的时间。
编辑:其实看到所有潜在的Android错误的反应本土的最简单方法就是运行“亚行logcat”在终端
与Windows OS/PHP开发内置的服务器/反应,原生的Android设备上:
- 检查服务器本地IP地址(
ipconfig
),例如172.16.0.10 - 在反应母语
fetch
使用该URL和正确的端口(fetch('http://172.16.0.10:8000/api/foo)
) - 运行PHP内置的服务器与此特定IP,而不是本地主机:
php -S 172.16.0.10:8000 ...
- 关闭Windows防火墙的专用网络
那固定的Android手机和我的本地服务器之间的连接问题。
只需为本地IP切换'localhost'就行了,也许是解析'localhost'的bug? – xHocquet
我有一个主要问题在android模拟器上做同样的事情。在iOS上批准info.plist中的域名是必要的。要清楚我正在尝试登录到我的.NET Web托管的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)
})
};
};
检查2案件娄
- 错误的终点
- 互联网连接:真实设备,虚拟设备
它已经吃了第二个小时的2小时儿子。
这应该是一个评论。这是**不是**问题的答案。 – GhostCat
我不够写评论。所以我提出一个问题。抱歉。 –
如果你有这个错误,你确定一切正常和你正在运行一个模拟器,只需关闭你的模拟器并重新启动它。
它现在应该运行。
这通常发生在你已经蛰伏系统一段时间后
如果您在模拟器上这个问题请确保您还测试设备上。这很可能没有发生在那里。
如此您知道,如果您可以解决它,没有什么可担心的。
由于证书已过期,我在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代码并调试软件包(index.android.bundle)
中的XHR代码,以便查找错误消息和URL,因为它在我的一些日志代码中,它们我显然没有登录到控制台。 :)
如果有人在iOS上遇到这个问题,请确保您使用的不仅仅是http。默认设置仅用于支持https。 – wuliwong
如何更改设置以支持HTTP? – MadPhysicist
您需要批准'info.plist'中的域名。 http://stackoverflow.com/questions/38418998/react-native-fetch-network-request-failed – nicholas