C# HttpWebResponse下载限速

在使用请求网络内容的时候,一般如下面这种方法:

// 非生产环境代码,请在实际使用时进行必要调整
// —— Mitchell Chu
// Blog:blog.useasp.net

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

using(var response = (HttpWebResponse)request.GetResponse())
using(var stream = response.GetResponseStream())
{
    byte[] buffer = new byte[4096];
    int read = 0;
    while((read = stream.Read(buffer, 0, buffer.Length)) >0){
        // buffer...
    }
}

 使用这种方式,一旦我们开始下载数据,即是全速下载——即理论上是客户端和服务端的最小速度为当前速度。如果以这个速度持续下载,要不服务端被拖垮,要不就是客户端被服务端封禁。当然,一般情况下,后者居多。在持续的针对某站资源下载的时候,限速是非常必要的。

在HttpWebResponse里面比较简单,只需要控制读取的速度,即可达到限速的目的:

// 非生产环境代码,请在实际使用时进行必要调整
// —— Mitchell Chu
// Blog:blog.useasp.net

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

using(var response = (HttpWebResponse)request.GetResponse())
using(var stream = response.GetResponseStream())
{
    byte[] buffer = new byte[4096];
    int read = 0;
    long total_read = 0;
    DateTime begin = DateTime.Now;
    TimeSpan ts = new TimeSpan();
    while((read = stream.Read(buffer, 0, buffer.Length)) >0){
        total_read += read;
        ts = DateTime.Now - begin;
        if((total_read / ts.TotalSeconds) > 1024){
            Thread.Sleep(1);  // 休息一下.
        }
    }
}

 

Thursday, March 10, 2016 | .NET技术

文章评论

No comments posted yet.

发表评论

Please add 6 and 6 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。