ContentLengthを取得するには

[戻る]
aharen [HomePage] 2010/01/06(水) 21:33:36
以前にもお世話になっています
環境はWindows Vista Home E, VC++2008 Pro です

CLRでwindowsフォームアプリケーションをつくり
using namespace System;
using namespace System::Net;
using namespace System::Text;
using namespace System::IO;
を設定し フォームに
button1つくりました
#pragma endregion
の後に
http://msdn.microsoft.com/ja-
jp/library/system.net.httpwebresponse.contentlength.aspx
を参考にbutton1には

private: System::Void button1_Click(System::Object^  sender, 
System::EventArgs^  e)
{
String^ str1("http://www.yahoo.co.jp/");

HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(WebRequest::Create( 
str1));
request->MaximumAutomaticRedirections = 4;
request->MaximumResponseHeadersLength = 4;
request->Credentials = CredentialCache::DefaultCredentials;
HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse
());
MessageBox::Show(String::Format( "Content length : {0}", response-
>ContentLength ));
response->Close();
MessageBox::Show("END");
}
を実装

リビルド後起動して
button1を押しても ContentLengthは -1 が表示されます
どこに不具合があると考えられますでしょうか
URIがたとえば http://www15.ocn.ne.jp/ などのときには正しく表示されます

なおContentLengthを取得するのが最終もくてきではありませんが
この部分がうまくいかないときもあるのでお伺いします

wclrp ( 'o') 2010/01/06(水) 22:12:40
ContentLengthが無いので取得できない。

プログラムで動的に作られるページは完成前に正確なサイズを知ることができないので
ContentLengthを付けられない。
静的ファイルはWebサーバーがサイズを調べて自動でContentLengthを付けてくれる。
動的でも1個の送信バッファに入りきれる小さいものはWebサーバーがサイズを調べて自動
でContentLengthを付けてくれることあるらしいよ。

瀬戸っぷ [E-Mail] 2010/01/06(水) 22:29:38
なお、そういう場合にchunked形式で送信してくるコトがあります。

Transfer-Encodingヘッダにchunkedと指定されています。
その後にサイズが16進数で記述されていた…はず。

HTTPレスポンスのchunked形式について調べてみるとよいかと。

aharen [HomePage] 2010/01/07(木) 09:54:44
[[解決]]
ヘッダーを見たところ そうですね ContentLength なしですね

HTTP/1.1 200 OK
Date: Thu, 07 Jan 2010 00:42:55 GMT
P3P: policyref="http://〜〜〜〜〜〜〜〜〜
Cache-Control: no-cache
Cache-Control: no-store, must-revalidate
Expires: -1
Pragma: no-cache
X-XRDS-Location: http://〜〜〜〜〜
Cache-Control: private
Connection: close
Content-Type: text/html; charset=utf-8

ありがとうございました

古いスレッドには追加発言できません。