環境:
.dll を改善して WebRequests (Get および Post) を実行し、新しい機能を追加しています。つまり、応答後に自動エンコードを検出します。
どのように機能しますか:
- ライブラリのユーザーは、エンコーディングを含むリクエストのデフォルト パラメータを設定します
- ライブラリは特定の URL のリクエストを実行します
- ライブラリは、ページのエンコーディングが事前設定されたものと同じかどうかをチェックします (メタ タグの値をチェックすることにより)。
- エンコードが同じでない場合は、正しいエンコード (ページにあるもの) を使用して応答を再エンコードします。
コードフラグメント:
// Executes web request and wait for response
using (HttpWebResponse resp = (HttpWebResponse) m_HttpWebRequest.GetResponse())
{
using (var stream = resp.GetResponseStream ())
{
using (var reader = new StreamReader (stream))
{
// Reading Stream to the end
response = reader.ReadToEnd ();
// Identifying the encode used on the page
// I will not paste method here, but it works
m_PageEncoding = IdentifyEncoding (response);
}
// Checking if the page encode is not the same as the preconfigured one
if (m_PageEncoding != System.Text.Encoding.GetEncoding (m_encoding))
{
using (var encodedReader = new StreamReader (stream, m_PageEncoding))
{
response = encodedReader.ReadToEnd();
}
}
}
}
問題:
Encoding 引数を持つ別の Reader を作成するEncodedReader
と、例外がスローされます: Stream was not readable
.
ブロックを使用してresponseStream内にリーダーをネストすると、2回目の読み取り後の応答値は常に「空」になります
using (var stream = resp.GetResponseStream ())
{
using (var reader = new StreamReader (stream))
{
// Reading Stream to the end
response = reader.ReadToEnd ();
// Identifying the encode used on the page
m_PageEncoding = IdentifyEncoding (response);
// Checking if the page encode is not the one i've used as argument
if (m_PageEncoding != System.Text.Encoding.GetEncoding(m_encoding))
{
using (var encodedReader = new StreamReader(stream, m_PageEncoding))
{
response = encodedReader.ReadToEnd();
}
}
}
}
質問:
リクエストを 2 回実行せずに、同じ WebResponse で ReadToEnd メソッドを 2 回実行するにはどうすればよいでしょうか。