2009-05-25 10 views

答えて

11

あなただけのあなたのコンテンツタイプを含める必要があり、そのページのヘッダーを取得する代わりに、完全なPOST/GET

のHEAD要求を行うことができます。 は、あなたがそのテキスト/ HTMLやXML

はEoinキャンベルの応答にフォローアップ良い例here on SO

+3

+1完璧な答えとHEADリクエストの正確な理由 –

+2

一部のサーバではHEADをサポートしていないので、忘れることはありません失敗したらGET/POSTを実行します。 –

+0

私は1つを "could"と2つを "should"と数えます。 ;] – bzlm

-3

「テキスト」リーダーで読み取ってください。 次に、あなたの実際のリーダーでそれをチャックします。

これはあまりにも単純ですか?

+0

彼は具体的には、ファイル全体をダウンロードする前に知りたいと言いました。 –

2

ヘッダーはContent-Typeです。帯域幅を節約するために、Webサーバーに文書の指定された部分を提供するよう強制できます。サーバーが応答に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; 
     } 
    } 
} 

もちろん、これは、Webサーバーがコンテンツ(MIME)タイプを公開していることを正しく想定していることを前提としています。しかし、あなたはこれを行うための帯域幅効率的な方法が必要だと述べたので、私はあなたがすべてのマークアップをダウンロードしてそれを分析したくないと仮定します!正直言って、コンテンツの種類は通常どんな場合でも正しく設定されます。

+0

あなたはただresponse.ContentTypeを使うことができます。 –

+0

@マチュウ:良い観察。投稿が編集されました。 – Noldorin

+1

これは正確に質問の半分に答えます。そこにいくつかの難しいコンテンツタイプがあります: http://www.w3.org/TR/xhtml-media-types/#application-xhtml-xml – bzlm

1

HttpWebResponseオブジェクトのヘッダーを確認します。 Content-Typeヘッダーは、XML/RSS文書の場合はtext/xml、標準Webページの場合は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 

、ファイルがある点に注意してください必要に応じてダウンロードされます。したがって、応答オブジェクトを要求しても、ファイル全体がダウンロードされるわけではありません。

関連する問題