HttpClient を使用してファイルの一部のみをダウンロードしようとしています (この例では、SEC Web サイトから)。
RangeHeaderValue を >= 4200 に設定すると、ファイルの一部が取得されます (response.Content.Headers.ContentLength
サイズは 32628 バイトですが、これは圧縮が原因である可能性があります)。リクエストが Fiddler で送信されるのを見るRange: bytes=0-4200
と、 の下にヘッダーが表示されMiscellaneous
ます。したがって、ヘッダーを正しく設定していると確信しています。私が理解できないのは 2 倍です。最大長をRangeHeaderValue
4200 未満に設定するContentLength
と 0 になるのはなぜですか (フィドラーで確認) 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);