c# - 如何使用 C# 从 URL 下载文件

标签 c# winforms download webclient

我想从以下地址下载 .xlsx 文件。 http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08

通过单击链接,浏览器将自动下载文件。我尝试从以下代码下载文件:

using (var client = new WebClient())
{
      client.DownloadFile("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08", @"D:\Archive\1396-08-08.xlsx");
} 

但是它会下载一个奇怪的文件,与第一步浏览器下载的文件不同。

我也尝试过:

System.Diagnostics.Process.Start(
"http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=0");

但是这段代码有两个缺点:

1- 它会打开一个不需要的浏览器。

2- 我无法确定下载文件的任何路径或文件名。

我想要获得与单击上面的链接地址下载的完全相同的文件。 我怎样才能下载我需要的文件?

Currupted file Correct File

最佳答案

Lasse Vågsæther Karlsen 是正确的。您的浏览器足够聪明,可以解压缩文件,因为响应包含 header :

content-encoding:"gzip"

您可以使用此代码下载并解压文件(根据您的文件名、路径等进行相应调整)

void Main()
{
    using (var client = new WebClient())
    {
        client.Headers.Add("accept", "*/*");
        byte[] filedata = client.DownloadData("http://members.tsetmc.com/tsev2/excel/MarketWatchPlus.aspx?d=1396-08-08");

        using (MemoryStream ms = new MemoryStream(filedata))
        {    
            using (FileStream decompressedFileStream = File.Create("c:\\deleteme\\test.xlsx"))
            {
                using (GZipStream decompressionStream = new GZipStream(ms, CompressionMode.Decompress))
                {
                    decompressionStream.CopyTo(decompressedFileStream);
                }
            }
        }
    }
}

关于c# - 如何使用 C# 从 URL 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47095791/

相关文章:

javascript - Asp.net/JQuery 在下载前显示/隐藏动画 gif

c# - XmlSerializer 和工厂创建的元素

c# - 如何按列格式化数据表行数据

c# - 无需使用 API 或 WMI 即可获取监视器显示名称?

c# - 如何从多个目录中获取文件并将其显示在数据 GridView 中?

url - 如何以单独的方法获取 Flutter Firebase 存储?

c# - Bool 变量未更新

c# - 调整 WPF 应用程序的大小,直到仅保留窗口栏

c# - 我怎样才能在 WinForms 应用程序中捕获所有 'unhandled' 异常?

node.js - 使用 SAS (NODEJS) 从 Azure Blob 存储创建可共享 URI