Reaccionar solicitud de correos nativos mediante solicitudes de recuperación falla en la solicitud de red

He encontrado el siguiente error. Por el momento estoy desarrollando una aplicación para Android con React Native, por lo tanto, estoy planeando usar fetch para hacer una solicitud de correos para mí.

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

La aplicación arroja ahora un error:

TypeError: Error en la solicitud de red

Cuando cambio el código a un GET-Request está funcionando bien, en el navegador con un window.alert () como un retorno es genial y también la extensión de cromo Postman devuelve datos correctamente.

El error de este React Native es bastante inútil, por lo que necesita obtener el error subyacente real primero. La forma más sencilla es escribir un pequeño programa nativo que sólo realizaría la misma consulta usando HttpsURLConnection .

Para mí, el error real fue java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. Que tiene una solución bien conocida: https://developer.android.com/training/articles/security-ssl.html#MissingCa

Esto es muy probable que su caso también, dado que los navegadores y Postman no tienen ningún problema con la solicitud. Para comprobarlo ejecute openssl s_client -connect XXreachable-domainXX.de:443 -showcerts . Si hay errores de certificado, solucionarlos primero, podría ahorrarle tiempo escribiendo el programa nativo.

Edit: en realidad la forma más fácil de ver todos los errores android subyacentes para reaccionar nativo es simplemente ejecutar 'adb logcat' en el terminal

Desarrollar con Windows OS / PHP incorporado en el servidor / reaccionar-nativo Android en el dispositivo:

  • Compruebe la dirección IP local del servidor ( ipconfig ), por ejemplo 172.16.0.10
  • En react-native fetch utilice esta URL y el puerto adecuado ( fetch('http://172.16.0.10:8000/api/foo) )
  • Ejecutar PHP servidor incorporado con esta IP específica en lugar de la localhost: php -S 172.16.0.10:8000 ...
  • Desactive el firewall de Windows para las redes privadas

Eso solucionó el problema de conexión entre el teléfono Android y el servidor local para mí.

Tuve un problema importante haciendo lo mismo en el emulador de Android. En iOS era necesario aprobar el dominio en el info.plist. Para ser claro, estaba intentando iniciar sesión en mi API web alojada en .NET.

La solución era asegurarse de que los datos de la entrada se parametrizaron (estoy bastante seguro de que es una palabra)

 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) }) }; }; 
  • React-native run-android DeviceException No se pudo crear ADB Bridge
  • Importación y convocatoria de carriles específicos de plataforma desde la plataforma general en Fastlane
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.