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

时间:2017-11-03 12:25:46

标签: 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

1 个答案:

答案 0 :(得分:1)

LasseVågsætherKarlsen是对的。您的浏览器非常智能,可以解压缩文件,因为响应中包含标题:

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);
                }
            }
        }
    }
}