2009-05-25 3 views

답변

11

당신은 단지 대신 전체 POST의 HEAD 요청을 할 수있는/당신에게 콘텐츠 형식을 포함해야 해당 페이지의 헤더를 얻을 것이다

를 가져옵니다. 당신은 그것의 텍스트/HTML이나 XML

은 에오 인 캠벨의 응답에 최대에 따라 좋은 예 here on SO

+3

+1 응답 및 HEAD 요청의 정확한 이유가 있습니다. –

+2

일부 서버는 HEAD를 지원하지 않으므로 다시 잊지 마십시오. 실패하면 GET/POST하십시오. –

+0

나는 하나를 "수", 2는 "해야한다". ;] – bzlm

-3

그냥 "텍스트"리더에서 읽습니다. 다음 중 어떤 것이 가장 적합한 지 결정하십시오. 예를 들어, 일부 태그를 찾으려면 마음에 듭니다.) 그런 다음 실제 리더에서 제거하십시오.

또는 너무 간단합니까?

+0

그는 특히 전체 파일을 다운로드하기 전에 알고 싶다고 말했습니다. –

2

Content-Type 헤더를 사용할 수 있으며 대역폭을 절약하기 위해 웹 서버가 문서의 지정된 부분을 사용자에게 제공하도록 할 수 있습니다. 서버에 응답에 Accept-Ranges: bytes 헤더가 포함되어있는 경우 Range: bytes=0-10을 사용하여 처음 10 바이트 만 다운로드 할 수 있습니다 (또는 아무것도 다운로드하지 않으려 고 할 수도 있음).

또한 GET 대신 HEAD 동사를 연구하십시오.

+0

+1 콘텐츠 형식을 제안하려고 시도했습니다. – Shoban

0

URL을 보면 파일 유형을 알 수 없습니다.

요청한 문서의 MIME 유형을 확인하거나 첫 번째 줄을 읽고 작성자가 Doctype을 입력했으면 좋겠다.

5

Theres는 경우를 구별 할 수 있어야에서, 여기에 System.Net 기능을 사용하는 것이 정확히 무엇을해야 코드 조각입니다 :

using (var request = System.Net.HttpWebRequest.Create(
    "http://tempuri.org/pathToFile")) 
{ 
    request.Method = "HEAD"; 

    using (var response = request.GetResponse()) 
    { 
     switch (response.ContentType) 
     { 
      case "text/xml": 
       // ... 
       break; 
      case "text/html": 
       // ... 
       break; 
     } 
    } 
} 

물론 이것은 웹 서버가 콘텐츠 (MIME) 유형을 게시하고 올바르게 작동한다고 가정합니다. 그러나 대역폭을 효율적으로 사용하는 방법을 원한다고 말한 이후로 모든 마크 업을 다운로드하고 분석하는 것을 원하지 않는다고 가정합니다. 솔직히 콘텐츠 유형은 대개 어떤 경우에도 올바르게 설정됩니다.

+0

그냥 response.ContentType을 사용할 수 있습니다. –

+0

@Matthew : 좋은 관찰. 소식이 수정되었습니다. – Noldorin

+1

이것은 정확하게 질문의 절반에 대답합니다. 그 밖에도 다음과 같은 까다로운 콘텐츠 유형이 있습니다. http://www.w3.org/TR/xhtml-media-types/#application-xhtml-xml – bzlm

1

HttpWebResponse 개체의 헤더를 확인하십시오. Content-Type 헤더는 XML/RSS 문서의 경우 text/xml을, 표준 웹 페이지의 경우 text/html을 읽어야합니다.

0

일반적으로 말해서, 이것은 불가능합니다. HTML/XML 파일을 application/octet-stream으로 제공하는 것이 가능하기는하지만 (도움이되지는 않지만) 가능하기 때문입니다. 또한 다른 사람들이 언급했듯이 여러 가지 유효한 XML MIME 유형이 있습니다.

WebRequest req = WebRequest.Create(url); 
WebResponse resp = req.GetResponse(); 
req.Method = "HEAD"; 
String contentType = resp.ContentType; 

if(contentType == "text/xml") 
    getXML(url); 
else if(contentType == "text/html") 
    getHTML(url); 

을하지만 당신은 어떻게 든 어느 쪽이든 그것을 처리하는 거라면, 당신은 할 수 있습니다 : : 그러나, HEAD 요청은 콘텐츠 형식 검사는 때때로 일할 수

WebRequest req = WebRequest.Create(url); 
WebResponse resp = req.GetResponse(); 
String contentType = resp.ContentType; 

if(contentType == "text/xml") 
    processXML(resp.GetResponseStream()); 
else if(contentType == "text/html") 
    processHTML(resp.GetResponseStream()); 
else 
    // process error condition 

파일은 명심하십시오 필요에 따라 다운로드 할 수 있습니다.따라서 응답 객체를 요청한다고해서 전체 파일이 다운로드되는 것은 아닙니다.