2012-11-26 126 views
2

在我的網站上,我目前使用jquery從位於bitbucket.org上的一個存儲庫生成一個標籤列表。但爲了做到這一點,我公開了存儲庫。我寧願保持私密。我可以使用ajax和jquery訪問我的私人bitbucket存儲庫嗎?

是否有可能允許我以這種方式訪問​​我的存儲庫,同時仍保持存儲庫的私有性。

代碼如下所示(在這種形式下,它將在所有標籤的控制檯中生成一個列表)。

$.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) 
    }); 
}); 
+0

你將不得不使用身份驗證。你可以在服務器端文件中做到這一點,以保持你的個人信息。 – alex

+0

然後,我將不得不放棄我的javascript方法,是嗎?我用PHP編寫,我需要通過curl和php的某個版本來訪問api嗎?還是有更簡單的方法? (我想我以前試過,並卡住:() – Jeff

+0

你會有你的JS,只是修改,所以調用是通過你的PHP代理 – alex

回答

3

基本上我已經瞭解到「需要授權標頭」。而共識似乎是,這不能用jQuery中的JSONP請求來完成。我不知道爲什麼。

但我已經能夠通過編寫一個php腳本,通過調用php file_get_contents傳遞授權標頭來實現期望的結果。然後按照上面的註釋建議,我可以使用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 api文檔沒有說明如何通過CURL手段驗證私人存儲庫。但是,如果您不使用CURL,則添加標題是您需要執行的操作。

希望能幫助別人。 (如果你認爲你更好地解釋這個,請隨時編輯這個答案)。

0

你也可以使用一個app password進行身份驗證,避免讓你的帳號密碼:

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), 
}); 
相關問題