我正在尝试从 React Native 应用程序访问此数据源。该 URL 在 iOS 上的浏览器和 RN 应用程序中运行良好,但在 Android 上则不然,我只是收到“获取网络错误”,没有 HTTP 响应代码等。
这是一个演示项目 https://snack.expo.dev/PyhI0-ifGaoh0SygD_xIV?platform=android
由于 Android 无法访问此端点(这似乎是返回一些 JSON 的常规 HTTPS GET 操作),可能会出现什么问题?谁能看出出了什么问题吗?
我尝试使用 Charles Proxy 检查网络流量,它没有给我任何线索,但至少我可以看到请求是从设备发送的。
但我也注意到,当通过启用 SSL 并安装证书的 Charles 代理运行时,上述数据源无法正确响应,即使在 iOS 或 MacOS 上的浏览器中也是如此。看起来响应正在传递,但连接并未关闭,客户端一直在等待。
我不确定这个问题是否与 Android 上的 RN 应用程序无法访问 URL 的问题有关,但这是我经历过的唯一无法通过 Charles 代理访问且也不能通过 RN 应用程序访问的数据源在安卓上?
看起来处理 gzip 响应有问题。
您的应用程序正在使用 okhttp 发出请求并发送
Accept-Encoding: gzip
标头。更改 fetch 调用以请求未压缩的文本似乎可以解决此问题,例如
fetch(url, {headers: {"Accept-Encoding": "identity"}})