我正在尝试使用 node.js 中的 bitbucket-api 访问 BitBucket 上的特定存储库,并且我的密码包含有趣的字符(圆括号和空格)。它不会抛出任何有用的错误或让我获取数据。
我碰巧喜欢我的密码,所以我不想更改它。我知道从密码中删除圆括号和空格可以解决问题。
我能做些什么?
我正在尝试使用 node.js 中的 bitbucket-api 访问 BitBucket 上的特定存储库,并且我的密码包含有趣的字符(圆括号和空格)。它不会抛出任何有用的错误或让我获取数据。
我碰巧喜欢我的密码,所以我不想更改它。我知道从密码中删除圆括号和空格可以解决问题。
我能做些什么?
经过大量搜索并进入 curl-transport.js 的实现后,我找到了解决此问题的方法。它依赖于对 curl-transport 传递给require('child_process').exec
.
本质上,该机制通过为 CURL 启动一个新进程并传入命令行参数来工作。通过使用圆括号,它会混淆 CURL,并且通过使用空格,它会混淆命令行参数解析。所以要解决这个问题,只需添加一个双引号作为用户名的第一个字符,并添加一个结束双引号作为密码的最后一个字符;因此,当两个字符串连接起来(即:用户名+“:”+密码)时,最终的字符串将"USERNAME:PASSWORD"
作为一个参数传递给进程。
我的节点代码如下所示:
var bitbucket = require('bitbucket-api');
var credentials = { username: '"USERNAME', password: 'PASSWORD With Spaces and ()s"' };
var client = bitbucket.createClient(credentials);
var repository = client.getRepository({ slug: 'repoName', owner: 'USERNAME' }, function (err, repo) {
//Code to access the repo object.
console.log(repo);
});
请注意用户名在值的开头如何有一个额外的双引号(这是 hack)。我在下面添加了空格并强调了它,因为它并不明显::
请注意密码如何在值的末尾有一个额外的双引号(这是 hack)。我在下面添加了空格并强调了它,因为它并不明显:
然后调用将成功,您将取回存储库的详细信息。
顺便说一句,这个修复在 Windows 8 上的 bitbucket-api V0.0.6 中对我有用。
在 Windows 上,请记住将以下内容放入您的路径中,以便它可以找到 CURL。你可以通过[Win8: Windows-X]->System->Advanced System Settings->Advanced->System Variables->Path->Edit...
确保 git 的二进制文件位于 CURL 的路径中:
C:\Program Files (x86)\Git\bin
此外,如果您试图让它在 heroku 上工作,那么您可能需要通过在 C:\Heroku 下重新安装 Heroku 工具带来解决路径问题(请参阅其他帖子了解原因)并将以下内容添加到路径中:
C:\Heroku\ruby-1.9.2\bin;C:\Heroku\bin;C:\Program Files (x86)\Git\bin