我正在尝试使用HttpClient仅下载文件的一部分(在此示例中,是从SEC网站下载的)。

如果我将RangeHeaderValue设置为> = 4200,则会得到文件的一部分(尽管response.Content.Headers.ContentLength表示大小为32628字节,这可能是由于压缩所致)。如果我在Fiddler中看到请求发出请求,我会在Range: bytes=0-4200下看到Miscellaneous作为 header 。因此,我相当有信心我可以正确设置标题。我不知道是2折,为什么将RangeHeaderValue的最大长度设置为小于〜4200,会导致ContentLength为0(在Fiddler中确认),为什么ContentLength不符合要求的范围?

我已经确认(通过查看 header )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);

最佳答案

毫无疑问,服务器声称它遵守范围标准,但似乎忽略了它。使用多个CDN进行进一步研究后,该代码可以正常工作。

关于c# - HttpClient和HttpRequestHeaders.Range,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18729334/

10-10 11:46