豆瓣oauth调用出错?
用nodejs的superagent客户端来调用豆瓣oauth,要获取的access_token的时候老出现javascript required_parameter_is_missing: client_id
的问题。有人遇到这种问题吗?豆瓣上面有好多人问,但是都解决不了我的问题:
我的代码:
exports.user_info = function (code) {
return request.post(config.douban.authorize_token_url)
.send("client_id", config.douban.app_id)
.send("client_secret", config.douban.app_secret)
.send("redirect_uri", config.back.code_back_url)
.send("grant_type", "authorization_code")
.send("code", code)
.set("ContentType", "application/x-www-form-urlencoded")
.end(function (res) {
console.log(res.text);
return request.get(config.douban.user_info_url + res.body.douban_user_id)
.set("Authorization", "Bearer " + res.body.access_token)
.end(function (response) {
console.log(response.text);
return response;
});
});
};
错误类似豆瓣上的问题,http://www.douban.com/group/topic/40590418/。再把app_id贴出来大家帮着看看:05a8eec5691e6dcf10facc503b5b496d。由于code可以正确得到所有app_id肯定没有问题。
按照楼下的建议,我用python试了一下:
>>> url = token_url + urllib.urlencode(params)
>>> url
'https://www.douban.com/service/auth2/tokencode=dbf492bfa678692e&client_secret=ec0faf30f04562a6&redirect_uri=https%3A%2F%2Fwww.douban.com%2Fservice%2Fauth2%2Ftoken&client_id=05a8eec5691e6dcf10facc503b5b496d&grant_type=authorization_code'
>>> url = token_url + "?"+urllib.urlencode(params)
>>> url
'https://www.douban.com/service/auth2/token?code=dbf492bfa678692e&client_secret=XXXXXXXXX&redirect_uri=https%3A%2F%2Fwww.douban.com%2Fservice%2Fauth2%2Ftoken&client_id=05a8eec5691e6dcf10facc503b5b496d&grant_type=authorization_code'
>>> from requests import *
>>> post(url)
<Response [400]>
>>> post(url).text
u'{"msg":"required_parameter_is_missing: client_id","code":113,"request":"POST \\/auth2\\/token"}'
>>>
豆瓣上面好像说也可以把参数放在url后面所以我就试了一下,问题依旧啊。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
所有value需要urlencode
https://www.douban.com/service/auth2/tokencode=dbf492bfa
难道不应该是https://www.douban.com/service/auth2/?tokencode=dbf492bfa
吗?update:
还有,为啥post提交要把参数作为GET方式过去……
setRequestHeader("Content-Type","application/x-www-form-urlencoded");
是Content-Type,不是ContentType