2 votes

React Native fetch() renvoie "Network request failed" sur Android 7, mais fonctionne bien sur Android 6

J'ai trouvé ( question ) que la demande de récupération se termine avec succès sur Android SDK Platform 23 (Android 6), mais sur Android SDK Platform 24 (Android 7) j'ai l'erreur 'Network request failed' :

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);
}

Erreur :

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)

J'utilise RN 0.46.3.

Quelle pourrait être la raison de cela ?

EDITAR: J'ai testé les versions API de 22 à 26, le problème ne se pose que sur l'API 24 (Android 7.0). Sur les autres versions de l'API, la demande se termine avec succès.

EDIT 2 : Github RN issue : https://github.com/facebook/react-native/issues/15100

2voto

Dmitry Maksakov Points 113

C'est un bogue sur Android 7.0, car décrit ici . Solution de contournement proposée par Vicky Chijwani :

Configurez votre serveur pour qu'il utilise la courbe elliptique prime256v1. Par exemple, dans Nginx 1.10, vous faites cela en définissant ssl_ecdh_curve prime256v1 ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X