我正在尝试使用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/