C#以编程方式下载GitHub私有仓库的示例

时间:2013-03-14 11:32:59

标签: c# .net authentication github https

我看到GitHub仓库的下载路径是

形式
https://github.com/{username}/{reponame}/archive/{branchname}.zip

对于私人仓库,可以理解的是,您需要提供凭据才能下载仓库,任何人都可以提供有关如何提供HTTPS基本身份验证的C#示例,以便我可以通过编程方式下载仓库吗?

谢谢,

4 个答案:

答案 0 :(得分:6)

这是一种纯粹的C#方式:

var githubToken = "[token]";
var url = "https://github.com/[username]/[repository]/archive/[sha1|tag].zip";
var path = @"[local path]";

using (var client = new System.Net.Http.HttpClient())
{
    var credentials = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}:", githubToken);
    credentials = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(credentials));
    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", credentials);
    var contents = client.GetByteArrayAsync(url).Result;
    System.IO.File.WriteAllBytes(path, contents);
}

答案 1 :(得分:1)

使用github令牌(https://help.github.com/articles/creating-an-access-token-for-command-line-use

        var githubToken = "token";
        var request = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/$OWNER/$REPO/contents/$PATH");
        request.Headers.Add(HttpRequestHeader.Authorization, string.Concat("token ", githubToken));
        request.Accept = "application/vnd.github.v3.raw";
        request.UserAgent = "test app"; //user agent is required https://developer.github.com/v3/#user-agent-required
        using (var response = request.GetResponse())
        {
            var encoding = System.Text.ASCIIEncoding.UTF8;
            using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
            {
                var fileContent = reader.ReadToEnd();
            }
        }

答案 2 :(得分:0)

使用CURL:

curl -L -F "login=$USER" -F "token=$TOKEN" https://github.com/$USER/$REPO/$PKGTYPE/$BRANCHorTAG

其中$ TOKEN是github配置文件中的API令牌,而不是用于与APIv3通信的oAuth2令牌。

$ USER是令牌所连接的用户帐户,不一定是repo所属的组织/其他用户。 $ USER的第二个实例是回购的用户/帐户。

$ REPO是私人存储库的名称

$ PKGTYPE是tarball或zipball,$ BRANCHORTAG是分支,如master,或者提交的标记名称。

$ USER的第一个实例必须能够访问属于$ USER的第二个实例的repo。

我无法在任何地方找到这个记录,所以如果你想要更详细的话,我也会有一些关于它的文章。

答案 3 :(得分:-1)

我正在调查Okctokit.Net目前。试一试。 NuGet:Install-Package Octokit