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

使用Node.js Fetch无法从WhatsApp Business API下载媒体,cURL/Postman正常

解决方案:Node.js fetch 请求 WhatsApp 媒体文件失败问题

以下是几个可行的排查和解决方向:

1. 完全模拟 curl/Postman 的请求头

curl 和 Postman 会自动携带一些默认请求头,这些头可能是 Meta 服务器验证的必要条件。你可以把 curl 所有默认头都加到 fetch 请求里:

fetch("你的媒体URL", {
  headers: {
    "Authorization": "Bearer ...",
    "User-Agent": "curl/7.64.1",
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive"
  },
  redirect: 'follow' // 显式开启重定向,确保跟随所有跳转
})

2. 使用 axios 替代 fetch

axios 的默认请求配置更贴近 curl 的行为,可能绕过 Meta 的验证逻辑:
首先安装 axios:

npm install axios

然后发起请求:

const axios = require('axios');

axios.get("你的媒体URL", {
  headers: { "Authorization": "Bearer ..." },
  responseType: 'arraybuffer' // 处理二进制媒体文件
})
.then(response => {
  // 处理返回的二进制数据,比如写入文件
  require('fs').writeFileSync('media-file.jpg', response.data);
})
.catch(err => console.error(err));

3. 检查代理/SSL 证书问题

Node.js 的 fetch 可能使用系统默认代理或证书,和 curl 的配置不一致。如果你的环境有代理,需在 fetch 中显式配置:

const { HttpsProxyAgent } = require('https-proxy-agent');

fetch("你的媒体URL", {
  headers: { "Authorization": "Bearer ..." },
  agent: new HttpsProxyAgent('http://你的代理地址:端口')
})

如果是证书问题,可临时禁用证书验证(仅测试环境使用):

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

fetch("你的媒体URL", {
  headers: { "Authorization": "Bearer ..." }
})

4. 直接复用 Postman 生成的代码

Postman 可直接导出成功请求的 Node.js fetch 代码,确保所有配置和头完全匹配:

  1. 在 Postman 中打开成功的请求
  2. 点击右上角「代码」按钮
  3. 选择「Node.js - Fetch」,复制代码到项目中使用

内容的提问来源于stack exchange,提问作者Dom Webber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:44:51