我正在尝试使用 HttpClient 仅下载文件的一部分(在此示例中,来自 SEC 网站)。
如果我将 RangeHeaderValue 设置为 >= 4200,我会得到文件的一部分(尽管response.Content.Headers.ContentLength
说大小是 32628 字节,这可能是由于压缩造成的)。Range: bytes=0-4200
如果我在Fiddler中看到请求发出,我会看到Miscellaneous
. 所以我相当有信心我正确设置了标题。我想不通的是 2 倍,为什么将最大长度设置RangeHeaderValue
为小于 ~4200 会导致 aContentLength
为 0(在 Fiddler 中确认),为什么不ContentLength
匹配请求的范围?
我已经确认(通过查看标题)SEC 服务器支持范围(Accept-Ranges: bytes
)。示例代码如下。
var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip });
var request = new HttpRequestMessage { RequestUri = new Uri("http://www.sec.gov/Archives/edgar/full-index/2013/QTR1/company.idx") };
request.Headers.Range = new RangeHeaderValue(0, 1000);
Console.WriteLine(request.Headers.Range.Ranges);
var response = await client.SendAsync(request);
Console.WriteLine(response.Headers);
Console.WriteLine(response.Content.Headers.ContentLength);
Console.WriteLine(response.RequestMessage);