React Native Android端Network request failed问题(iOS正常,URL含短横线)
Android端React Native调用带短横线域名API报Network request failed的解决方案
针对仅Android设备出现Network request failed、iOS正常、API域名含短横线(如stg-example.com)的问题,以下是排查和解决步骤:
1. 检查Android网络安全配置
Android 7.0+对HTTPS域名的安全限制更严格,若服务器证书不被系统默认信任,或域名配置存在兼容性问题,会导致请求失败:
- 在
res/xml目录下创建network_security_config.xml,添加信任目标域名的配置:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">stg-example.com</domain> <!-- 若使用自签名证书,需添加证书信任配置 --> <!-- <trust-anchors> <certificates src="@raw/your_cert_file"/> </trust-anchors> --> </domain-config> </network-security-config>
- 在
AndroidManifest.xml的application标签中引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config">
2. 排查DNS解析问题
部分Android设备的DNS解析对带短横线的域名处理异常:
- 手动在Android设备上执行
ping stg-example.com,确认域名能正常解析到IP; - 若解析失败,可尝试强制使用IPv4请求:
- 先通过DNS解析获取目标域名的IPv4地址,再用IP发起请求,同时设置
Host头(示例用fetch):
- 先通过DNS解析获取目标域名的IPv4地址,再用IP发起请求,同时设置
// 简单实现DNS解析(可借助第三方库优化) async function resolveIPv4(domain) { const response = await fetch(`https://dns.google/resolve?name=${domain}&type=A`); const data = await response.json(); return data.Answer[0].data; } // 使用解析后的IP发起请求 const ip = await resolveIPv4('stg-example.com'); const apiResponse = await fetch(`https://${ip}/your-api-path`, { headers: { 'Host': 'stg-example.com' } });
3. 确认基础网络权限
检查AndroidManifest.xml中是否添加了网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
4. 验证服务器SSL配置
Android对SSL证书链的要求比iOS严格,若证书链不完整会导致请求失败:
- 使用
openssl命令检测证书链:
openssl s_client -connect stg-example.com:443
- 若输出中出现
unable to get local issuer certificate,说明证书链缺失,需要在服务器端补充完整的中间证书。
5. 排查React Native版本问题
部分旧版React Native存在域名解析的bug,建议升级到0.68以上的稳定版本,再测试请求是否正常。
6. 排除代理/VPN干扰
若测试设备开启了代理或VPN,可能导致Android端域名解析异常,关闭后再重试请求。
内容的提问来源于stack exchange,提问作者nilesh patel
相关产品推荐
相关产品推荐

