2013-05-09 2 views
1

저는 HttpWebRequest를 사용하고 있으며 전체 응답을 다운로드하기 전에 응답의 ContentLength를 확인하려고합니다. 그러나 전화 할 때 :콘텐츠를 다운로드하기 전에 큰 응답의 ContentLength를 확인하십시오.

var res = request.GetResponse(); // entire response is being downloaded 
var len = res.ContentLegth; // need only this value 

어떻게 C#에서 달성 될 수 있습니까?

+0

다운로드를 시작하면 '일시 중지'할 수 없습니다. 다운로드 만 방해 할 수 있습니다. – nothrow

답변

1

질문에 원래 코드가 실제로 작동하기 때문에 "GetResponse"를 호출 할 때 "HEAD"를 다운로드하고 ContentLength는 사용할 수 있습니다. "chunked"전송 인코딩을 가진 리소스를 얻었 기 때문에 저에게 효과적이지 않았습니다. 여전히 작동해야합니다. 피들러를 열어 테스트하지 않은 경우 ContentLength에 -1이 반환됩니다. Appler는 피들러가 "chunked"응답을 만났을 때 "req.GetResponse()"를 호출하는 경우에도 모두 다운로드하려고 시도합니다.

+0

네. 나는 똑같은 망할 문제가 있었다. – Dipu

2

GET 대신 HEAD 요청을해야합니다. 그러면 응답의 HTTP 헤더 만 반환됩니다.

모든 표준화 된 HTTP 요청 유형은 here으로 기록되어 있습니다.

+1

하지만 ContentLength를 얻지 못할 것입니다. – I4V

+0

방금 ​​확인 했으므로 옳습니다. 어떤 경우에는 내가 생각할 수있는 유일한 방법은 헤더를 읽은 다음 Content-Length를받은 후 다운로드를 중단하는 것입니다. – Phylogenesis

+0

@ I4V 콘텐츠 길이는 [이 문서] (http://en.wikipedia.org/wiki/List_of_HTTP_header_fields)를 기반으로 헤더의 일부일 수 있습니다 – noobob

관련 문제