Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C从github下载zipball_C#_Github Api_Webclient Download - Fatal编程技术网

C# 用C从github下载zipball

C# 用C从github下载zipball,c#,github-api,webclient-download,C#,Github Api,Webclient Download,需要从C中的给定链接下载zipball 对!!我搜索了网络和stackoverflow,试图完成这个看似不可能完成的任务,花了几个小时 具有讽刺意味的是,在Curl中,它是单行线,工作起来很有魅力 curl -L https://api.github.com/repos/username/reponame/zipball > repo.zip 我想用C做和上面旋度一样的事情 已尝试WebClient.DownloadFile 给予 禁止403 我也尝试过异步方法 给予 0 bye文件无错

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

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

具有讽刺意味的是,在Curl中,它是单行线,工作起来很有魅力

curl -L https://api.github.com/repos/username/reponame/zipball > repo.zip
我想用C做和上面旋度一样的事情

已尝试WebClient.DownloadFile 给予

禁止403

我也尝试过异步方法 给予

0 bye文件无错误/异常

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

我已经安装了Octokit.NET,但它缺少文档,所以我甚至不知道从哪里开始做这件事——可能是WebClient版本,但我确实在.NET libs中尝试过

找到了这个答案,但并不真正理解

甚至尝试在C中运行.sh脚本,但它给了我一个异常,即它无法在此操作系统上运行此类shell

当我尝试使用WebClient时,我没有得到403,但出现了一个异常:

System.Net.WebException: The server committed a protocol violation. Section=ResponseStatusLine
查找带有相同错误的其他问题时,我发现GithubAPI服务器需要设置一个用户代理。在那之后,事情就变得微不足道了:

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文件不是文本数据


您还没有展示您对异步版本所做的操作-我猜您已经开始下载,但没有等到下载完成后才处理客户端。

以后,请展示您尝试过的代码,最好是在一个简短但完整的程序中。例如,我想我知道为什么异步版本可能以一个0字节的文件结束,但如果没有看到您的代码,我不能肯定。好的,它可以工作,您是我的英雄!请告诉我我做错了什么/你做对了什么?什么是用户代理?这就像对链接进行类似浏览器的调用吗?至于异步,我在SOF的某个地方读到,它在开始接收数据之前开始写入文件,并在数据到来时继续写入。。。所以我打错电话给林克。。。非常感谢你@LikeaFox:用户代理意味着发出请求的软件的指示-例如浏览器标识符。看起来GitHub需要指定一些用户代理,但并不关心它是什么。我注意到它在浏览器中可以正常下载。。。我在想我怎么做浏览器式的请求,但我以前从未做过,也不知道怎么做。。。有没有办法知道它需要用户代理?你能不能给我一个在大多数网站上都可以使用的用户代理的例子?再次感谢!我建议你研究一下常用的用户代理。。。这实际上取决于服务器决定执行什么。GitHub需要这个有点奇怪。。。