博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# HttpWebResponse下载限速
阅读量:5909 次
发布时间:2019-06-19

本文共 1228 字,大约阅读时间需要 4 分钟。

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

code
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里面比较简单,只需要控制读取的速度,即可达到限速的目的:

code
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); 
// 休息一下.
        
}
    
}
}

原文

 

转载地址:http://euvpx.baihongyu.com/

你可能感兴趣的文章
第二冲刺阶段第十一天
查看>>
机器语言的介绍
查看>>
UML系列 (五) 为什么要用UML建模之建模的重要性
查看>>
http协议和https协议
查看>>
811. Subdomain Visit Count
查看>>
log4j使用总结
查看>>
JS对JSON的操作总结 (转)
查看>>
强制转换原始字符串python (转)
查看>>
[数据结构和算法]快速排序笔记
查看>>
C#由变量捕获引起对闭包的思考
查看>>
SQL Server 把当前日期中月份和几号中的0 去掉
查看>>
Asp.net中的页面跳转及post数据
查看>>
啊哈磊--算法3:快速排序
查看>>
数据特征分析——概述
查看>>
PHP PDO fetch() 详解
查看>>
C与C++的编程风格区别
查看>>
GridLayout的注意点
查看>>
正则表达式
查看>>
Jquery——Ajax
查看>>
-msoft-float -mhard-float区别
查看>>