2016-08-31 4 views
0

ウェブページのコンテンツの長さを取得しようとしています。例http://www.google.comウェブサイトのコンテンツの長さを読む

私はC#を使用していますが、私が使用したコードは、正しい長さを教えてくれません。ある人が妥当性を確認できますか?

var request = (HttpWebRequest)WebRequest.Create("http://www.google.com.au"); 
request.Method = "GET"; 
var myResponse = request.GetResponse(); 
var responseLength = myResponse.ContentLength; 

using (var sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8)) 
{ 
    var result = sr.ReadToEnd(); 
    myResponse.Close(); 
} 

responseLengthは-1ですが、結果は長すぎます。長さには何らかの値がありますが、それは正しいですか?

+0

ん。ContentLengthが信頼できないはい、それは、サーバが(ヘッダが最初に送信されなければならないことを考えると、動的コンテンツまたはさえ可能)必ずしもそうではない応答ヘッダーの値を提供することを要求します –

答えて

2

responseLengthは-1ですが、結果は常にです。長さには値がありますか?

まあそれはいくつかのウェブサイト(またはいくつかのウェブサイトでは、いくつかの回答)ためのものであってもよい - 他のケースでは、あなたはresponseLengthための非負の値が表示されます。あなたがしているのは、オプションでContent-Length HTTPヘッダーを取得することです。基本的には、それがサーバーに提供されているかどうかはサーバーに依存します。

応答長は、提供されている場合はバイト単位で表示されますが、result.LengthはUTF-16コード単位であることに注意してください。コンテンツの長さをバイトのにしたい場合は、StreamReaderを作成してテキストとして読み取るのではなく、ストリームからバイナリデータを直接読み取る必要があります。

0

あなたはDownloadStringをして長さをチェックしたいと思うと思います。

Console.WriteLine(new WebClient().DownloadString("https://google.com/").Length);

関連する問題