13

我看到 GitHub 存储库的下载路径是以下形式

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

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

谢谢,

4

4 回答 4

9

这是一种纯 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);
}
于 2015-08-03T14:52:11.483 回答
4

请参阅有关创建个人访问令牌的指南,然后运行以下命令:

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();
    }
}
于 2017-08-22T09:41:56.667 回答
0

与卷曲:

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 的第二个实例的存储库。

我在任何地方都找不到这个文档,所以如果你想要更详细的信息,我也会写一些关于它的文章。

于 2013-03-14T11:34:20.107 回答
-2

我目前正在研究Okctokit.Net。试一试。NuGet:安装包 Octokit

于 2014-02-04T19:16:34.710 回答