Pubsubhubbub订阅报错“Challenge mismatch”,求排查方案
问题:YouTube频道推送订阅验证失败(Challenge mismatch)
我正尝试获取YouTube频道的推送内容,参考了YouTube官方推送通知文档及PubSubHubbub核心规范文档,编写了如下Node.js程序:
const express = require('express'); const bodyParser = require('body-parser'); const axios = require('axios') const cp = require('child_process'); const shell = require('shelljs'); require('body-parser-xml')(bodyParser); const app = express(); app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({extended: true})); // for parsing application/x-www-form-urlencoded app.use(bodyParser.xml({ limit:'25MB' })); app.get('/', function(req, res) { console.log('GET') console.log(req.protocol) // "https" console.log(req.hostname) // "example.com" console.log(req.path) // "/creatures" console.log(req.originalUrl) // "/creatures?filter=sharks" console.log(req.subdomains) // "['ocean']" hub_challenge = req.query['hub.challenge'] console.log('---------------------------------------') console.log(req.query) console.log(req.body) console.log('---------------------------------------') if (hub_challenge) { res.status(204).end(hub_challenge) } }); app.post('/', function(req, res) { console.log('POST') console.log(req.protocol) // "https" console.log(req.hostname) // "example.com" console.log(req.path) // "/creatures" console.log(req.originalUrl) // "/creatures?filter=sharks" console.log(req.subdomains) // "['ocean']" const body = req.body var message = undefined if (body.hasOwnProperty('message')) { message = req.body.message } else if (body.hasOwnProperty('edited_message')) { message = req.body.edited_message } console.log('---------------------------------------') console.log(req.body) console.log('---------------------------------------') res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate'); res.header('Expires', '-1'); res.header('Pragma', 'no-cache'); if (hub_challenge) { res.status(204).end() } }); // Finally, start our server app.listen(1111, function() { console.log('App listening on port 1111!') });
我通过Pubsubhubbub的订阅页面发起订阅,选择了Verify Type = sync,服务器已收到验证请求,日志如下:
GET http ec2-xxx-xxx-xxx-xxx.eu-west-1.compute.amazonaws.com / /?hub.topic=https://www.youtube.com/xml/feeds/videos.xml%3Fchannel_id%3DUCLzgGM7q2bXebJUs7cymdhg&hub.challenge=2167537649875952601&hub.mode=subscribe&hub.lease_seconds=432000 [ 'compute', 'eu-west-1', 'ec2-xxx-xxx-xxx-xxx' ] --------------------------------------- {} { 'hub.topic': 'https://www.youtube.com/xml/feeds/videos.xml?channel_id=UCLzgGM7q2bXebJUs7cymdhg', 'hub.challenge': '2167537649875952601', 'hub.mode': 'subscribe', 'hub.lease_seconds': '432000' } #2167537649875952601# ---------------------------------------
但Pubsubhubbub立即返回验证结果:"Challenge mismatch.",使用Subscriber Diagnostics调试后,订阅仍处于"unverified"状态。请问哪里操作出错了?
内容的提问来源于stack exchange,提问作者icalvete
相关产品推荐
相关产品推荐

