如果我想部分下载文件并定义在请求报头的单个范围,我得到 在响应体中的请求的文件的字节流。具有多个HTTP请求范围
但是,如果我如下指定多个范围,总是得到为每个定义的范围内的额外 响应头(至极描述所请求的范围),该破坏 所下载的文件的响应主体内。如Wireshark的所示
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();
}
请求:
http://img197.imageshack.us/img197/8199/requesty.png
响应体应该只包含该文件的字节流,但另外含有在每一限定范围的开始不需要的响应头:
是否有可能避免在体内的附加响应报头,而无需请求每个范围分别?
或
是否有一个内置的方式来过滤额外的响应头,其大小可以根据HTTP的服务器上有什么不同?
就问:你为什么要这么做?我猜你上面的代码只是一个例子,因为直接请求连续的范围没有意义? – 2010-02-25 22:09:01