我已经发现 (question https://stackoverflow.com/questions/45144938/react-native-android-fetch-for-https-returns-network-request-failed)该获取请求在 Android SDK Platform 23 (Android 6) 上成功结束,但在 Android SDK Platform 24 (Android 7) 上出现错误“网络请求失败”:
try {
let res = await fetch('https://pricesea.ru/api/auth/login', {
method: 'POST',
credentials: 'include',
headers: new Headers({'Accept': 'application/json', 'Content-type': 'application/x-www-form-urlencoded'}),
body: `username=${this.state.username}&password=${this.state.password}`
});
if (res.ok) {
...
}
} catch (e) {
console.log(e);
}
Error:
TypeError: Network request failed
at XMLHttpRequest.xhr.onerror (fetch.js:441)
at XMLHttpRequest.dispatchEvent (event-target.js:172)
at XMLHttpRequest.setReadyState (XMLHttpRequest.js:546)
at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:381)
at XMLHttpRequest.js:485
at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
at MessageQueue.__callFunction (MessageQueue.js:260)
at MessageQueue.js:101
at MessageQueue.__guard (MessageQueue.js:228)
at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:100)
我正在使用 RN 0.46.3。
这可能是什么原因?
EDIT:我测试了从 22 到 26 的 API 版本,问题仅出现在 API 24 (Android 7.0) 上。在其他 API 版本上,请求成功结束。
EDIT 2:Github RN问题:https://github.com/facebook/react-native/issues/15100 https://github.com/facebook/react-native/issues/15100
这是 Android 7.0 上的一个错误,如下所示此处描述 https://stackoverflow.com/questions/39133437/sslhandshakeexception-handshake-failed-on-android-n-7-0。
Vicky Chijwani 提出的解决方法:
配置您的服务器以使用椭圆曲线 prime256v1。为了
例如,在 Nginx 1.10 中,您可以通过设置 ssl_ecdh_curve 来做到这一点
prime256v1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)