我正在尝试使用node.js中的bitbucket-api访问BitBucket上的特定存储库,而我的密码包含有趣的字符(圆括号和空格)。它不会抛出任何有用的错误,也不会让我获取数据。
我碰巧喜欢我的密码,所以我不想更改它。我知道删除密码中的圆括号和空格可以解决这个问题。
我能做什么?
发布于 2014-04-06 18:34:13
在对curl-transport.js的实现进行了大量的搜索和深入研究之后,我找到了解决这个问题的方法。它依赖于对curl-transport传递给require('child_process').exec的内容的理解。
本质上,该机制的工作方式是启动一个新的CURL进程并传入命令行参数。通过使用圆括号,它可以混淆CURL,而通过使用空格,它可以混淆命令行参数解析。因此,要解决这个问题,只需添加一个双引号作为用户名的第一个字符,并添加一个结束双引号作为密码的最后一个字符;因此,当两个字符串连接在一起(例如: username+":"+password)时,最终的字符串将是"USERNAME:PASSWORD",它将get作为一个参数传递给进程。
我的节点代码如下所示:
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);
});注意username如何在值的开头有一个额外的双引号(这就是hack)。我在下面添加了空格并强调了它,因为它不明显:
用户名:‘" USERNAME'
注意password如何在值的末尾有一个额外的双引号(这就是hack)。我在下面添加了空格并强调了它,因为它并不明显:
密码:‘带有空格和()的密码“" '
然后调用将成功,您将获得存储库的详细信息。
顺便说一句,这个修复适用于Windows8上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\binhttps://stackoverflow.com/questions/22892851
复制相似问题