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

React Native Fetch请求报错:TypeError: Network request failed求助

问题解决:React Native调用第三方API时Content-Type字段冲突

问题重现

开发React Native应用时,调用第三方PUT接口,API要求移除Content-Type字段,但遇到矛盾问题:

  • 不设置请求头时,fetch会自动添加Content-Type,导致接口返回403
  • 尝试完全不配置headers、直接传buffer,fetch报错TypeError: Network request failed
  • Postman中移除Content-Type字段可正常请求成功

无Content-Type的请求(报错代码)

fetch("https://xxx", {
    method: "PUT",
    body: buffer,
})

错误信息:

Unhandled promise rejection [TypeError: Network request failed]

添加Content-Type的请求(403代码)

fetch("https://xxx", {
    method: "PUT",
    body: buffer,
    headers: {
      "Content-Type": "application/json" // 或其他值
    }
})

返回结果:

Response 403

可行解决方案

方案1:用XMLHttpRequest替代fetch,精准控制请求头

React Native的fetch会自动为带body的请求添加Content-Type,XMLHttpRequest可以完全手动控制请求头,避免自动注入:

const xhr = new XMLHttpRequest();
xhr.open('PUT', 'https://xxx');
// 不设置任何Content-Type相关字段
xhr.onload = function() {
  if (xhr.status >= 200 && xhr.status < 300) {
    const response = xhr.responseText;
    // 处理响应数据
  } else {
    console.error('请求失败:', xhr.status);
  }
};
xhr.onerror = function() {
  console.error('网络请求失败');
};
xhr.send(buffer);

方案2:显式将Content-Type设为undefined(部分场景有效)

尝试在headers中显式设置Content-Type为undefined,阻止fetch自动添加默认值:

fetch("https://xxx", {
    method: "PUT",
    body: buffer,
    headers: {
      "Content-Type": undefined
    }
})

注:该方法在部分React Native版本或平台可能不生效,建议优先测试方案1。

方案3:验证请求体buffer的一致性

确认React Native中传递的buffer和Postman的请求体完全匹配:

  • 打印buffer的字节长度、内容,和Postman的请求体做对比
  • 若buffer由文件/资源生成,检查编码格式是否和接口要求一致(比如是否为二进制流)

方案4:排查平台差异

iOS和Android的网络层实现存在差异,分别测试两个平台的请求行为:

  • 若仅Android出现问题,检查是否开启了不必要的网络配置,或确认App已申请网络权限

内容的提问来源于stack exchange,提问作者xiaoxin yuan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:13:22