【问题标题】:Download zipball from github in C#在 C# 中从 github 下载 zipball
【发布时间】:2015-11-20 07:41:48
【问题描述】:

需要从 C# 中的给定链接下载 zipball

是的!我搜索了网络和 stackoverflow,并试图完成这个看似不可能的任务好几个小时......

具有讽刺意味的是,在 Curl 中它是单行的,并且像魅力一样工作..

curl -L https://api.github.com/repos/username/reponame/zipball > repo.zip

我想在 C# 中做同样的事情 curl 在上面做...

试过WebClient.DownloadFile() 给了

禁止 (403)

也尝试过异步方法 给了

0 再见文件(无错误/异常)

尝试了 HttpClient 数据下载和文件流写入器,给出与上述相同的错误。像 streamwirter 这样的接缝根本没有被调用,所以它无法访问服务器,这是我问题的主要部分

我安装了 Octokit.NET,但它缺少文档,所以我什至不知道从哪里开始这样做(可能是 WebClient 版本,但我确实在 .NET 库中尝试过)

找到了这个答案,但不是很明白 (Cannot get repository contents as .zip file (zipball) in Octokit.net)

甚至尝试在 C# 中运行 .sh 脚本,但它给了我一个例外,即它无法在此操作系统上运行这种 shell

【问题讨论】:

  • 以后,请展示您尝试过的代码,最好是简短而完整的程序。例如,我想我知道为什么异步版本可能以 0 字节文件结束,但如果没有看到您的代码,我无法确定。

标签: c# github-api webclient-download


【解决方案1】:

当我用WebClient 尝试这个时,我没有得到 403,而是一个异常:

System.Net.WebException: The server committed a protocol violation. Section=ResponseStatusLine

查找其他有相同错误的问题,我发现 GitHub API 服务器需要设置用户代理。在那之后,它是微不足道的:

using System;
using System.Net;

class Test
{
    static void Main()
    {
        using (var client = new WebClient())
        {
            client.Headers.Add("user-agent", "Anything");
            client.DownloadFile(
                "https://api.github.com/repos/nodatime/nodatime/zipball",
                "nodatime.zip");
        }
    }
}

...效果很好。我已经为用户存储库而不是组织尝试过它,这也很好。

您绝对不会想对 StreamWriter 做任何事情,因为那是用于文本数据 - 而 zip 文件不是文本数据。

你没有展示你对异步版本做了什么 - 我的猜测是你开始下载但没有等到它完成才处置客户端。

【讨论】:

  • 好的,它有效,你是我的英雄!请告诉我我做错了什么/你做对了什么?什么是用户代理?这就像对链接进行类似浏览器的调用吗?至于异步,我在 SOF 上的某个地方读到它在开始接收数据之前开始写入文件,并在数据到来时继续写入......所以这是我对链接的错误调用......非常感谢!
  • @LikeaFox:用户代理旨在指示发出请求的软件 - 例如。浏览器标识符。看起来 GitHub 需要指定 一些 用户代理,但并不关心它是什么。
  • 我注意到它在浏览器中下载得很好......我在想我怎么能做类似浏览器的请求,但我以前从来没有做过,也不知道怎么做......有没有办法知道它需要用户代理吗?你能快速给我一个应该在大多数网站上工作的用户代理的例子吗?再次感谢!
  • 我建议你对常用的用户代理进行研究......这实际上取决于服务器决定强制执行的内容。 GitHub 需要这个有点奇怪……
猜你喜欢
  • 2020-07-27
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2021-09-21
  • 2022-06-10
  • 2020-02-12
相关资源
最近更新 更多