2

在我的网站上,我目前正在使用 jquery 从托管在 bitbucket.org 上的我的一个存储库生成标签列表。但为了做到这一点,我必须公开存储库。我宁愿保密。

我是否可以通过这种方式允许站点访问我的存储库,同时仍然保持存储库的私有性。

代码看起来像这样(在这种形式下,它将在控制台中生成一个所有标签的列表)。

$.ajax({
        url:"https://api.bitbucket.org/1.0/repositories/jeffreycwitt/publicrepository/tags",
        dataType: "jsonp",
        crossDomain: true,
        success: function (returndata){
           $.each(returndata, function(key, value){
               console.log(key)
    });
});
4

2 回答 2

3

基本上我已经了解到“需要授权标头”。并且共识似乎是这不能用 jquery 中的 JSONP 请求来完成。我真的不知道为什么。

但是我已经能够通过编写一个通过 phpfile_get_contents调用传递授权标头的 php 脚本来达到预期的结果。然后如上面的评论所建议的,我可以使用 ajax 脚本来加载所需的数据。php 脚本如下所示:

context = stream_context_create(array(
'http' => array(
    'header' => "Authorization: Basic " . base64_encode("$username:$password")
)
));

// Make the request 
$json = file_get_contents($url, false, $context);

//parse data
//turn json data into an array
$obj_a = json_decode($json, true);

//get all keys of array
$tags = array_keys($obj_a);

因此,如果有人想从私有 bitbucket 存储库中检索所有标签,这就是您的操作方式。Bitbucket api 文档没有说明如何验证私有存储库,除非通过 CURL。但是,如果您不使用 CURL,则需要添加标题。

希望对某人有所帮助。(如果您认为您能更好地解释这一点,请随时编辑此答案)。

于 2012-11-28T19:13:52.503 回答
2

您还可以使用应用密码进行身份验证,以避免暴露您的帐户密码:

const username = 'your-username'; // USERNAME, not email
const appPassword = 'app-pass';
const repoOwner = 'you-or-your-team';
const repository = 'repository-name';

$.ajax({
    url: `https://api.bitbucket.org/1.0/repositories/${repoOwner}/${repository}/tags`,
    headers: {
        Authorization: 'Basic ' + btoa(`${username}:${appPassword}`)
    },
    success: console.log,
    error: d => console.log(d.responseText),
});
于 2018-02-26T13:20:51.220 回答