天天看點

C# HttpWebResponse下載下傳限速

在使用 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); 

// 休息一下.

}

}

}

原文

C# HttpWebResponse下載下傳限速