【发布时间】:2019-01-28 08:28:36
【问题描述】:
我正在尝试使用 C# WebClient 下载文件。
这里是网址: http://www.czce.com.cn/cn/DFSStaticFiles/Future/2018/20180821/FutureDataClearParams.txt
如果我手动下载它,一切看起来都很好。 但是,如果我使用 WebClient 下载文件,则内容已损坏。 我尝试使用许多不同的编码方法。 下面是重现问题的最少代码。
class Program
{
static void Main(string[] args)
{
WebClient client = new WebClient();
client.Proxy = new WebProxy("some company proxy");
string url = "http://www.czce.com.cn/cn/DFSStaticFiles/Future/2018/20180821/FutureDataClearParams.txt";
client.DownloadFile(url, @"D:\file.txt");
}
}
问题现已解决,感谢大家的帮助(@Gauravsa,@John)。 该文件确实是 GZipped。
解决办法是:
public class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
return request;
}
}
【问题讨论】:
-
你能解释一下它是如何损坏的吗?
-
请发布一些代码,最好是minimal reproducible example。
-
你是如何确定文件的编码是 UTF-8 的?
-
WebClient.Encoding用于上传,而不是下载。下载时使用服务器设置的编码代替,所以这是一个红鲱鱼。 -
@Lasse That 和
DownloadFile可以正常工作。我得到的文件与通过网络浏览器下载的文件完全相同(因此我对这个问题投了反对票)。
标签: c# .net webclient downloadfile