我正在尝试使用node.js中的bitbucket-api访问BitBucket上的特定存储库,而我的密码包含有趣的字符(圆括号和空格)。它不会抛出任何有用的错误或让我获取数据。
我碰巧喜欢我的密码所以我不想改变它。我知道从密码中删除圆括号和空格可以解决问题。
我该怎么办?
答案 0 :(得分:0)
经过大量搜索并进入curl-transport.js的实现后,我找到了解决此问题的方法。它依赖于对curl-transport传递给require('child_process').exec
的理解。
本质上,该机制的工作原理是为CURL启动一个新进程并传入命令行参数。通过使用圆括号,它会混淆CURL,并且通过使用空格会混淆命令行参数解析。因此,为了解决这个问题,只需添加双引号作为用户名的第一个字符,并将结束双引号添加为密码的最后一个字符;所以当两个字符串连接起来时(即:username +“:”+ password),最后的字符串将是"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);
});
注意用户名在值的开头有一个额外的双引号(这是黑客攻击)。我已经添加了空格并在下面强调了它,因为它并不明显::
注意密码在值的末尾有一个额外的双引号(这是黑客攻击)。我添加了空格并在下面强调了它,因为它并不明显:
然后调用将成功,您将获得存储库的详细信息。
顺便说一下,这个修复程序在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