调用Twitter API oauth/request_token返回页面不存在错误code34如何解决
问题原因
- 报错code 34的本质是请求的API端点不存在:你使用的
twitter包的post方法默认会为相对路径自动拼接/1.1/前缀,而oauth/request_token是OAuth专属端点,不属于v1.1版本的API路径,最终请求的地址错误导致404。 - 初始化客户端时传入了个人的access_token相关参数,不符合三方授权流程的要求:OAuth第一步获取请求令牌仅需要应用的consumer_key和consumer_secret,不需要提前传入access_token,该参数是用户授权完成后才能拿到的用户专属凭证。
修复方案
代码修正
var Twitter = require('twitter'); // 初始化仅传入应用消费密钥,不要传个人access token参数 const client = new Twitter({ consumer_key: process.env.TWITTER_CONSUMER_KEY, consumer_secret: process.env.TWITTER_CONSUMER_SECRET }); // 直接传入request_token端点的完整地址,避免包自动拼接错误前缀 client.post('https://api.twitter.com/oauth/request_token', {oauth_callback: process.env.CALLBACKURL}) .then(response => { console.debug('got twitter token', response); res.redirect('https://api.twitter.com/oauth/authenticate?oauth_token=' + response.oauth_token) }) .catch(function(err) { console.error('failed to authenticate twitter', err, res.locals.host); console.log(err); });
后续流程注意事项
- 用户跳转授权后,回调地址会返回
oauth_token和oauth_verifier参数,携带这两个参数请求https://api.twitter.com/oauth/access_token端点,即可拿到对应用户的access_token_key和access_token_secret。 - 存储用户的access_token凭证后,重新初始化客户端并传入该用户的凭证,调用
statuses/update端点即可实现代用户发推。 - 提前在Twitter开发者后台将你使用的回调地址添加到应用的白名单中,否则会出现回调地址不匹配的报错。
- 该
twitter包长期未维护,若后续需要使用Twitter v2版本API,建议替换为更活跃的twitter-api-v2包。
内容的提问来源于stack exchange,提问作者stackers
相关产品推荐
相关产品推荐

