StreamReader を使用して HttpWebResponse の GetResponseStream() によって返されたストリームを読み取るときに、「チャンクされた」応答を読み取るのに問題があります。
// response is an HttpWebResponse
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd(); // throws exception...
メソッドが呼び出されると、reader.ReadToEnd()
次の System.IO.IOExceptionが発生します: トランスポート接続からデータを読み取ることができません: 接続が閉じられました。
上記のコードは、サーバーが「チャンクされていない」応答を返したときに問題なく機能します。
私がそれを機能させることができた唯一の方法は、最初のリクエストに (デフォルトの HTTP/1.1 ではなく) HTTP/1.0 を使用することですが、これは不十分な回避策のようです。
何か案は?
@チャック
あなたのソリューションはかなりうまくいきます。最後の Read() で同じ IOExeception をスローします。しかし、StringBuilder の内容を調べると、すべてのデータが受信されたように見えます。したがって、おそらく Read() を try-catch でラップして、「エラー」を飲み込む必要があります。