【发布时间】:2011-01-18 14:30:59
【问题描述】:
如果我想部分下载文件并在请求标头中定义单个范围,我会得到 响应正文中请求文件的字节流。
但如果我指定多个范围如下,我总是会为每个定义的范围额外 响应正文中损坏的响应标头(描述请求的范围) 下载的文件。
static void Main(string[] args)
{
Console.Write("Please enter target File: ");
string Target = Console.ReadLine();
string Source = @"http://mozilla-mirror.3347.voxcdn.com/pub/mozilla.org/firefox/releases/3.6/win32/de/Firefox%20Setup%203.6.exe";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Source);
request.Credentials = CredentialCache.DefaultCredentials;
// define multiple Ranges
request.AddRange( 0, 1000000);
request.AddRange(1000000, 2000000);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream source = response.GetResponseStream())
{
using (FileStream target = File.Open(Target, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite))
{
byte[] buffer = new byte[4096];
int BytesRead = 0;
int TotalBytesRead = 0;
while((BytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
{
target.Write(buffer, 0, BytesRead);
TotalBytesRead += BytesRead;
Console.WriteLine("{0}", TotalBytesRead);
}
}
}
Console.WriteLine("Downloading Finished!");
Console.ReadLine();
}
请求如Wireshark所示:
http://img197.imageshack.us/img197/8199/requesty.png
Response Body 应该只包含文件的 Byte-Stream,但在每个定义 Range 的开头额外包含不需要的 Response-Header:
是否可以在不单独请求每个 Range 的情况下避免正文中额外的响应头?
或
是否有内置方法来过滤附加响应标头,其大小可能因 HTTP 服务器而异?
【问题讨论】:
-
只是问:你为什么要这样做?我猜你上面的代码只是一个例子,因为像这样直接请求连续的范围是没有意义的?
标签: c# .net http httpwebrequest