您现在的位置是:首页 > 文章详情

C# HttpWebResponse下载限速

日期:2018-05-31点击:890

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 非生产环境代码,请在实际使用时进行必要调整
// —— 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里面限制下载速度比较简单,只需要控制读取的速度,即可达到限速的目的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 非生产环境代码,请在实际使用时进行必要调整
// —— 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);  // 休息一下.
         }
     }
}

原文 C# HttpWebResponse下载限速

 

原文链接:https://yq.aliyun.com/articles/678411
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章