gpt4 book ai didi

c# - 具有多个范围的 HTTP 请求

转载 作者:可可西里 更新时间:2023-11-01 17:15:50 24 4
gpt4 key购买 nike

如果我想部分下载一个文件并在请求 header 中定义一个范围,我得到响应体中请求文件的字节流。

但是如果我如下指定多个范围,我总是会为每个定义的范围获得一个额外的损坏的响应主体中的响应 header (描述请求的范围)下载的文件。

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();
}

请求如W​​ireshark所示:

http://img197.imageshack.us/img197/8199/requesty.png

Response Body 应该只包含文件的 Byte-Stream,但在每个定义的 Range 的开头还包含不需要的 Response-Header:

Response hex dump

是否可以在不单独请求每个 Range 的情况下避免在正文中添加额外的响应 header ?

是否有内置方法来过滤额外的响应 header ,其大小可能因 HTTP 服务器而异?

最佳答案

不,这就是 HTTP/1.1 中多个范围的工作方式。参见 RFC 2616, Section 19.2 .

关于c# - 具有多个范围的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com