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

NodeJS中刷新Youtube API的PubSubHubbub订阅遇400错误求助

解决方案

你的代码存在两个关键问题,导致服务器无法正确解析请求参数:

  1. 请求头配置错误:Content-Type没有放在headers对象中,fetch API不会识别顶层的Content-Type属性,服务器因此无法正确解析表单格式的请求体。
  2. 模板字符串未生效:hub.topic使用单引号包裹,${process.env.ID}不会被解析为环境变量,导致topic值无效。

修正后的代码(推荐使用URLSearchParams简化编码)

const details = {
  'hub.mode': 'subscribe',
  'hub.topic': `https://www.youtube.com/xml/feeds/videos.xml?channel_id=${process.env.ID}`,
  'hub.callback': process.env.callback,
  'hub.secret': process.env.secret
};
const endpoint = 'http://pubsubhubbub.appspot.com/subscribe';

// 用URLSearchParams自动处理表单编码,避免手动拼接出错
const formBody = new URLSearchParams(details);

const result = await fetch(endpoint, {
  method: "POST",
  body: formBody,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
});

console.log(result.status, await result.text());

若保留手动拼接方式,只需修正请求头部分

const details = {
  'hub.mode': 'subscribe',
  'hub.topic': `https://www.youtube.com/xml/feeds/videos.xml?channel_id=${process.env.ID}`,
  'hub.callback': process.env.callback,
  'hub.secret': process.env.secret
};
const endpoint = 'http://pubsubhubbub.appspot.com/subscribe';

var formBody = [];
for (const property in details) {
  const encodedKey = encodeURIComponent(property);
  const encodedValue = encodeURIComponent(details[property]);
  formBody.push(encodedKey + "=" + encodedValue);
}

formBody = formBody.join("&");
const result = await fetch(endpoint, {
  method: "POST",
  body: formBody,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
});

console.log(result.status, await result.text());

关键修正说明

  • 将Content-Type放入headers对象:这是fetch API指定请求头的标准方式,服务器会据此正确解析application/x-www-form-urlencoded格式的请求体。
  • 改用反引号包裹hub.topic:确保环境变量process.env.ID被正确插值,生成有效的topic URL。
  • 使用URLSearchParams:自动处理参数的编码和拼接,避免手动编码可能出现的特殊字符转义错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:20:22