2013-09-10 2 views
4

파일의 일부 (예 : SEC 웹 사이트)를 다운로드하기 위해 HttpClient를 사용하려고합니다.HttpClient 및 HttpRequestHeaders.Range

RangeHeaderValue를 4200 이상으로 설정하면 response.Content.Headers.ContentLength은 압축으로 인해 크기가 32628 바이트라고하지만 파일의 일부를 가져옵니다. Fiddler에서 요청을 보게되면 아래의 헤더로 Range: bytes=0-4200이 표시됩니다. 그래서 나는 헤더를 올바르게 설정하고 있다고 확신한다. 왜 내가 이해할 수없는 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); 

OutputFromProgram

답변

1

. 여러 CDN을 사용하여 추가 연구를하면 코드가 제대로 작동합니다.