我设法通过网页浏览器上的https://pubsubhubbub.appspot.com/subscribe订阅了Youtube Feed,我一直试图通过NodeJS上的Fetch刷新我对PubSubHubbub的订阅,我使用的代码如下
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, 'Content-Type': 'application/x-www-form-urlencoded'})
console.log(result.status, await result.text())
预期:状态204
实际:状态400,内容:“无效的集线器值。模式:“
我希望内容至少能告诉我无效值是什么,但它最终是空白的,在我看来,它根本没有设法读取发布的内容。我正在寻找改进代码的方法,以便我不会遇到这个问题。
1条答案
按热度按时间ykejflvf1#
我意识到我应该在内容类型头中指定
charset=UTF-8
.我还不是很精通发送请求,所以这对我来说绝对是一个大开眼界.在将其添加到服务器中后,如预期的那样,服务器响应204,所以我将结束我的问题.我尝试过从child_process模块中导入
exec()
函数来运行cURL并提交请求,但是我建议坚持使用一种语言来提高可读性,使用exec()
直接从shell运行命令可能会产生不良影响。