C# 如何使用纯REST API调用下载私有bitbucket.org存储库,版本1或2

C# 如何使用纯REST API调用下载私有bitbucket.org存储库,版本1或2,c#,rest,bitbucket,atlassian-sourcetree,bitbucket-api,C#,Rest,Bitbucket,Atlassian Sourcetree,Bitbucket Api,我试图使用C#克隆/下载我的私有bitbucket.org存储库,但我想使用纯HTTPS REST调用,而不是第三方库,我想了解它是如何工作的 到目前为止,我只能找到api版本1的示例代码。 这就是我到目前为止在C#的工作: 这将进行身份验证,并返回3个值。我粘贴到浏览器中的最后一个URL,在那里我授予我的应用程序访问权限,最后我得到了一个oauth\u验证器 注意:我真的不想这样做,因为我正在编写一个服务器程序,它实际上无法将用户发送到浏览器链接(但一次只能发送一件事情) 然后运行以下代码:

我试图使用C#克隆/下载我的私有bitbucket.org存储库,但我想使用纯HTTPS REST调用,而不是第三方库,我想了解它是如何工作的

到目前为止,我只能找到api版本1的示例代码。 这就是我到目前为止在C#的工作:

这将进行身份验证,并返回3个值。我粘贴到浏览器中的最后一个URL,在那里我授予我的应用程序访问权限,最后我得到了一个oauth\u验证器

注意:我真的不想这样做,因为我正在编写一个服务器程序,它实际上无法将用户发送到浏览器链接(但一次只能发送一件事情)

然后运行以下代码:

var url = "https://bitbucket.org/api/1.0/oauth/access_token";

        var token = "TOKEN FROM PREV CALL";
        var time = GenerateTimeStamp();
        var sigBaseStringParams = "";
        //sigBaseStringParams += "oauth_callback=http%3A%2F%2Flocal%3Fdump";

        var secret = "SECRET";
        var key = "KEY";

        sigBaseStringParams += "oauth_consumer_key=" + key;
        sigBaseStringParams += "&" + "oauth_token=" + token;
        sigBaseStringParams += "&" + "oauth_nonce=" + GetNonce();
        sigBaseStringParams += "&" + "oauth_signature_method=" + "HMAC-SHA1";
        sigBaseStringParams += "&" + "oauth_timestamp=" + time;
        sigBaseStringParams += "&" + "oauth_verifier=AUTH VERIFIER FROM PREV CALL";
        var sigBaseString = "POST&";
        sigBaseString += Uri.EscapeDataString(url) + "&" + Uri.EscapeDataString(sigBaseStringParams);

        var tokenSecret = "TOKEN SECRET FROM PREVIOUS CALL";
        var signature = GetSignature(sigBaseString, secret, tokenSecret);

        var res = PostData(url, sigBaseStringParams + "&oauth_signature=" + Uri.EscapeDataString(signature));
这给了我一个错误的请求。我看不到其他的东西了

我将按照本页上的步骤进行操作:

我之所以这样做是因为我想最终向这个URL发出POST请求(或获取):

var url2 = "https://bitbucket.org/ACCOUNT/REPOSITORY/get/tip.zip?access_token="+token;
因为我认为这将在一个zip文件中为我提供整个存储库。如果我把它放在浏览器中,它会工作,因为我登录了bitbucket

如果有更新/更容易/更好的方法,我愿意接受建议


提前感谢

我找到了一个非常简单的解决方案。 我只需为GET请求提供凭据:

 public static void Downloadfiles(string username, string password, string account, string repository, string pathToSave)
    {
        var creds = Base64Encode(String.Format("{0}:{1}", username, password));

        var url = String.Format("https://bitbucket.org/{0}/{1}/get/tip.zip", account, repository);

        using (var client = new WebClient())
        {

            client.Headers.Add("Authorization", "Basic " + creds);
            client.Headers.Add("Content-Type", "application/octet-stream");
            client.DownloadFile(url, pathToSave);
        }
    }

您可以暂时使用第三方工具,并使用Fiddler查看它的功能,或者使用实际的源代码或dotPeek查看第三方的源代码(如果没有混淆)。这是一种方法,但他们是如何解决的?当然,文档应该是可用的,因为它是一个公共api。我肯定我只是找错了地方或者错过了什么。
 public static void Downloadfiles(string username, string password, string account, string repository, string pathToSave)
    {
        var creds = Base64Encode(String.Format("{0}:{1}", username, password));

        var url = String.Format("https://bitbucket.org/{0}/{1}/get/tip.zip", account, repository);

        using (var client = new WebClient())
        {

            client.Headers.Add("Authorization", "Basic " + creds);
            client.Headers.Add("Content-Type", "application/octet-stream");
            client.DownloadFile(url, pathToSave);
        }
    }