【问题标题】:C# example of downloading GitHub private repo programmatically以编程方式下载 GitHub 私有 repo 的 C# 示例
【发布时间】:2013-03-02 17:31:18
【问题描述】:

我看到 GitHub 存储库的下载路径格式为

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

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

谢谢,

【问题讨论】:

    标签: c# .net authentication github https


    【解决方案1】:

    creating a personal access token 上查看本指南,然后运行以下命令:

    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】:

      这是一个纯 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);
      }
      

      【讨论】:

      • 我意识到这是一个非常古老的答案,但我无法让它发挥作用;即使当我在浏览器中输入 url 时它会正常下载,它也总是返回 404。有什么我想念的吗?
      • @Dinesh Bolkensteyn 在哪里可以得到[sha1|tag]var url
      • @koverflow 它是与您要下载的提交相对应的 SHA1。或者,您可以改为传递标签或分支名称
      【解决方案3】:

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

      【讨论】:

      • 这个库不支持克隆。
      【解决方案4】:

      带有卷曲:

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

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

      【讨论】:

      • 我知道你可以在其他问题中使用curl,但我不能假设机器上安装了curl,所以不幸的是必须使用基本的.Net原语。
      猜你喜欢
      • 2012-03-19
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2020-02-17
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多