リンク(URL)がXMLファイル(RSSフィード)を指しているかどうか、またはヘッダを見るだけで普通のHTMLファイルかどうかを知る必要があります。C#HttpWebRequest - ダウンロードせずにHTMLページとXMLページの間を消す方法
そこに私のための良いアドバイス? :)
ありがとう! Roey
リンク(URL)がXMLファイル(RSSフィード)を指しているかどうか、またはヘッダを見るだけで普通のHTMLファイルかどうかを知る必要があります。C#HttpWebRequest - ダウンロードせずにHTMLページとXMLページの間を消す方法
そこに私のための良いアドバイス? :)
ありがとう! Roey
あなただけのあなたのコンテンツタイプを含める必要があり、そのページのヘッダーを取得する代わりに、完全なPOST/GET
のHEAD要求を行うことができます。 は、あなたがそのテキスト/ HTMLやXML
はEoinキャンベルの応答にフォローアップ良い例here on SO
「テキスト」リーダーで読み取ってください。 次に、あなたの実際のリーダーでそれをチャックします。
これはあまりにも単純ですか?
彼は具体的には、ファイル全体をダウンロードする前に知りたいと言いました。 –
ヘッダーはContent-Type
です。帯域幅を節約するために、Webサーバーに文書の指定された部分を提供するよう強制できます。サーバーが応答にAccept-Ranges: bytes
ヘッダーを含む場合は、Range: bytes=0-10
を使用して最初の10バイトのみをダウンロードできます(または何もダウンロードしないこともできます)。
またGET
の代わりにHEAD
動詞を調べてください。
+1私はコンテンツタイプを提案しようとしていた;-) – Shoban
URLを見るだけでは、どのファイルタイプが見つからないのですか。
あなたがリクエストしたドキュメントのMIMEタイプをチェックするか、最初の行を読んで、作者がDoctypeに入れてもらうことをお勧めします。
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)タイプを公開していることを正しく想定していることを前提としています。しかし、あなたはこれを行うための帯域幅効率的な方法が必要だと述べたので、私はあなたがすべてのマークアップをダウンロードしてそれを分析したくないと仮定します!正直言って、コンテンツの種類は通常どんな場合でも正しく設定されます。
HttpWebResponseオブジェクトのヘッダーを確認します。 Content-Typeヘッダーは、XML/RSS文書の場合はtext/xml、標準Webページの場合はtext/htmlを読み込む必要があります。
一般的に言えば、これは不可能です。これは、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
、ファイルがある点に注意してください必要に応じてダウンロードされます。したがって、応答オブジェクトを要求しても、ファイル全体がダウンロードされるわけではありません。
+1完璧な答えとHEADリクエストの正確な理由 –
一部のサーバではHEADをサポートしていないので、忘れることはありません失敗したらGET/POSTを実行します。 –
私は1つを "could"と2つを "should"と数えます。 ;] – bzlm