React Native安卓端fetch请求JSON数据功能突然失效该如何排查?
React Native fetch抛出「network request failed」排查思路
- 先排查基础网络环境
先确认测试设备/模拟器的网络是否正常,是否开了代理、VPN,或者系统防火墙限制了应用联网权限。可以先在设备浏览器直接访问你的请求地址,比如示例中的https://reqres.in/api/products/3,确认可以正常拿到返回,排除域名本身无法访问的问题。 - 检查HTTPS证书/域名配置合规性
最新的iOS和Android系统都对HTTPS证书有严格校验:- Android 9及以上默认禁用明文HTTP请求,如果你的实际请求地址是HTTP,需要在
AndroidManifest.xml中配置android:usesCleartextTraffic="true",或者改用HTTPS - iOS 14及以上的ATS安全策略会拦截不符合要求的HTTPS请求,比如证书过期、自签名证书、TLS版本低于1.2的请求,需要确认服务端证书合规,或者临时在Info.plist中配置ATS例外规则
- Android 9及以上默认禁用明文HTTP请求,如果你的实际请求地址是HTTP,需要在
- 检查依赖/运行环境变更
如果你近期升级了React Native版本、更换了打包工具、修改了原生层配置,会影响fetch的默认实现:- 0.60以上版本的React Native已经移除了自带的网络请求核心库依赖,部分场景需要手动引入
whatwg-fetchpolyfill - 检查是否有其他原生插件修改了全局的网络拦截逻辑,比如埋点插件、代理调试插件会篡改请求路径或者拦截请求
- 0.60以上版本的React Native已经移除了自带的网络请求核心库依赖,部分场景需要手动引入
- 补全代码异常捕获逻辑定位问题
你贴出的示例代码缺少异常捕获分支,补全catch分支后可以拿到更具体的报错信息辅助定位:var array = []; fetch('https://reqres.in/api/products/3') .then((response) => { if(!response.ok) throw new Error(`请求错误: ${response.status}`) return response.json() }) .then((json) => { array = json; }) .then(() => { console.log("get Remote data DONE" + array); }) .catch(err => console.log("请求异常详情:", err)) - 排查服务端侧限制
确认服务端是否新增了跨域限制、UA校验、IP访问频率限制,或者CORS配置被修改,React Native的fetch请求会自带特定的UA标识,可能被服务端安全策略拦截。
内容的提问来源于stack exchange,提问作者blendstylez
相关产品推荐
相关产品推荐

