You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中Axios请求报Network Error但Postman可正常请求

排查React Native中Axios Network Error的方案

一、先获取更详细的错误信息

别只打印err,改成打印以下字段,能拿到更精准的故障细节:

catch (err) {
  console.log('错误详情:', {
    message: err.message,
    code: err.code,
    response: err.response,
    request: err.request,
    config: err.config
  });
}

比如err.code会显示具体错误类型(如ECONNABORTED代表超时、ERR_NETWORK代表基础网络问题),err.request能看到请求的完整参数,帮你定位是请求头、域名还是证书的问题。

二、检查React Native的平台网络配置

iOS端

iOS默认的ATS(App Transport Security)会限制非HTTPS请求或证书不被信任的域名。在Info.plist中添加对应域名的ATS例外(优先用域名白名单而非全局开放,更安全):

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>product.company.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.2</string>
    </dict>
  </dict>
</dict>

Android端

  1. 检查AndroidManifest.xml是否添加了必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  1. 若接口是HTTP协议,Android 9+默认阻止明文请求,需在application标签中添加:
android:usesCleartextTraffic="true"

三、调整Axios请求配置

  1. 添加超时设置:部分超时请求会被判定为网络错误,给请求加个明确的超时时间:
const res = await axios.get('https://product.company.com/api/documents/invoices', {
  timeout: 10000 // 10秒超时
});
  1. 对齐Postman请求头:Postman默认携带的请求头可能和Axios不同,手动设置相同的请求头测试:
const res = await axios.get('https://product.company.com/api/documents/invoices', {
  headers: {
    'User-Agent': 'PostmanRuntime/7.32.3',
    'Accept': '*/*'
  }
});
  1. 验证域名解析:用dns库检查设备是否能正常解析目标域名:
import dns from 'dns';
dns.lookup('product.company.com', (err, address) => {
  console.log('解析到的IP:', address);
});

四、测试基础网络连通性

用React Native自带的fetch测试同一个接口,判断是Axios问题还是RN环境问题:

const testFetch = async () => {
  try {
    let res = await fetch('https://product.company.com/api/documents/invoices');
    let data = await res.json();
    console.log(data);
  } catch (err) {
    console.log('fetch错误:', err);
  }
}

如果fetch也报错,说明是RN环境的网络配置问题;如果fetch正常,就是Axios的配置需要调整。

五、检查证书信任问题

如果后端用的是自签名证书,RN默认会拒绝信任:

  • Android:在res/xml下创建network_security_config.xml,将证书放到res/raw目录后配置信任:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">product.company.com</domain>
        <trust-anchors>
            <certificates src="@raw/your_certificate" />
        </trust-anchors>
    </domain-config>
</network-security-config>

然后在AndroidManifest.xml的application标签中添加:

android:networkSecurityConfig="@xml/network_security_config"
  • iOS:将证书添加到项目中,并在Info.plist的ATS配置中信任该证书。

内容的提问来源于stack exchange,提问作者J.Do

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:15:51