使用超时从url下载文件

sor*_*419 4 .net c# webclient httpwebrequest

我正在使用C#.Net在Visual Studio 2010中编写程序

该程序是将文件从给定的URL保存到本地驱动器,具有自定义超时以节省时间.

说网址是http://mywebsite.com/file1.pdf,我想将文件保存到目录中C:\downloadFiles\

目前,我正在使用WebClient.

WebClient.DownloadFile("http://mywebsite.com/file1.pdf", "C:\downloadFiles\file1.pdf");
Run Code Online (Sandbox Code Playgroud)

我能够保存文件,但我遇到了一些问题.

有时,网址只是不响应,所以我让我的程序在终止之前尝试下载5次.然后我意识到WebClient的默认超时对我的需求来说太长了(比如2分钟或者什么)有没有一种简单的方法来设置超时,比如15秒?

我也调查过HttpWebRequest,我可以轻松设置超时HttpWebRequest.Timeout = 15000;.但是,使用这种方法,我不知道如何下载/保存文件.

所以我的所有问题都是:哪个更简单,设置超时WebClient或保存文件HttpWebRequest?我该怎么做呢?

I4V*_*I4V 11

您可以创建自己的WebClient

public class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        var req = base.GetWebRequest(address);
        req.Timeout = 15000;
        return req;
    }
}
Run Code Online (Sandbox Code Playgroud)


Sam*_*son 6

HttpClient如果您使用 .NET 4.5,则可以使用该类:

using(var httpClient = new HttpClient())
{
    httpClient.Timeout = new TimeSpan(0, 0, 15);

    Stream response = await httpClient.GetStreamAsync("http://mywebsite.com/file1.pdf");

    ...
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子jsonhttp://share.linqpad.net/aaeeum.linq