9

HttpClient を使用してファイルの一部のみをダウンロードしようとしています (この例では、SEC Web サイトから)。

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

OutputFromProgram

4

2 に答える 2

3

ここに疑問の余地はありません。サーバーは範囲標準に準拠していると主張していますが、それを無視しているように見えます。いくつかの CDN を使用してさらに調査すると、コードは適切に機能します。

于 2013-09-17T17:17:22.047 に答える