我尝试在普通的Node.js中使用Dropbox Core API。
编程为:
但是我无法使用“缺少客户端凭据”消息令牌和API返回错误。
我应该如何编写代码来获取令牌?
感谢。
编辑从链接的要点中添加代码:
// About API:
// https://www.dropbox.com/developers/core/docs#oa2-authorize
// https://www.dropbox.com/developers/core/docs#oa2-token
var config = require('./config.json');
// OR...
// var config = {
// 'appKey': 'xxxxxxxxxxxxxxx',
// 'secretKey': 'xxxxxxxxxxxxxxx'
// };
var readline = require('readline');
var https = require('https');
var querystring = require('querystring');
// Show authrize page
var url = 'https://www.dropbox.com/1/oauth2/authorize?' +
querystring.stringify({ response_type:'code', client_id:config.appKey });
console.log('Open and get auth code:\n\n', url, '\n');
// Get the auth code
var rl = readline.createInterface(process.stdin, process.stdout);
rl.question('Input the auth code: ', openRequest); // defined below
function openRequest(authCode) {
var req = https.request({
headers: { 'Content-Type': 'application/json' },
hostname: 'api.dropbox.com',
method: 'POST',
path: '/1/oauth2/token'
}, reseiveResponse); // defined below
// ################################
// Send code
// (maybe wrong...)
var data = JSON.stringify({
code: authCode,
grant_type: 'authorization_code',
client_id: config.appKey,
client_secret: config.secretKey
});
req.write(data);
// ################################
req.end();
console.log('Request:');
console.log('--------------------------------');
console.log(data);
console.log('--------------------------------');
}
function reseiveResponse(res) {
var response = '';
res.on('data', function(chunk) { response += chunk; });
// Show result
res.on('end', function() {
console.log('Response:');
console.log('--------------------------------');
console.log(response); // "Missing client credentials"
console.log('--------------------------------');
process.exit();
});
}
答案 0 :(得分:1)
这段代码错了:
var data = JSON.stringify({
code: authCode,
grant_type: 'authorization_code',
client_id: config.appKey,
client_secret: config.secretKey
});
req.write(data);
您正在发送一个JSON编码的正文,但API需要表单编码。
我个人建议使用像request
这样的高级库,以便更轻松地发送表单编码数据。 (请参阅我在此处的使用:https://github.com/smarx/othw/blob/master/Node.js/app.js。)
但是你应该能够在这里使用查询字符串编码。只需将JSON.stringify
替换为querystring.stringify
:
var data = querystring.stringify({
code: authCode,
grant_type: 'authorization_code',
client_id: config.appKey,
client_secret: config.secretKey
});
req.write(data);