c# - 如何在 C# 中下载 zip 文件?

标签 c# http get download

我使用 HTTP GET 在浏览器中下载一个 zip 文件,类似于 https://example.com/up/DBID/a/rRID/eFID/vVID (不是确切的网址)

现在,当我尝试使用 C# 代码(与上面相同的 GET 方法)为桌面应用程序执行相同的下载时,下载的 zip 文件不是有效的存档文件。当我在记事本中打开这个文件时,它是一些 HTML 页面。

我想我没有正确设置一些 header 。我环顾四周寻找例子。我发现了几个 wrt 上传,但没有看到任何下载。

代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/zip";
try
{
    HttpWebResponse res = (HttpWebResponse)request.GetResponse();
    using (StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default))
    {
        StreamWriter oWriter = new StreamWriter(@"D:\Downloads\1.zip");
        oWriter.Write(sr.ReadToEnd());
        oWriter.Close();
    }
    res.Close();
}
catch (Exception ex)
{
}

最佳答案

这主要是因为您使用StreamWriter : TextWriter 来处理二进制Zip 文件。 StreamWriter 需要文本并将应用编码。甚至简单的 ASCII 编码器也可能会尝试“修复”它认为无效的行尾。

您可以将所有代码替换为:

  using (var client = new WebClient())
  {
    client.DownloadFile("http://something",  @"D:\Downloads\1.zip");
  }

Note对于新代码,您应该查看 HttpClient 而不是 WebClient。
然后不要使用 using( ) { }

关于c# - 如何在 C# 中下载 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4769032/

相关文章:

c# - 在 ASP.Net 中发送电子邮件的最低限度

multithreading - HTTP GET 多线程脚本

java - 通过 HTTP 客户端编写curl 等效 java 代码时遇到问题

php - 我可以 POST 和 GET 到同一个 PHP 页面吗

jquery - 使用 jQuery POST 函数从服务器返回 JSON 数据

c# - 混合异步/同步架构

C# 哈希集包含非唯一对象

c# - 数据绑定(bind)到 WPF 中的方法

java - HTTP 分块传输

ios - 将 image/jpeg 从 GET 请求转换为 UIImage