0

環境:

.dll を改善して WebRequests (Get および Post) を実行し、新しい機能を追加しています。つまり、応答後に自動エンコードを検出します。

どのように機能しますか:

  1. ライブラリのユーザーは、エンコーディングを含むリクエストのデフォルト パラメータを設定します
  2. ライブラリは特定の URL のリクエストを実行します
  3. ライブラリは、ページのエンコーディングが事前設定されたものと同じかどうかをチェックします (メタ タグの値をチェックすることにより)。
  4. エンコードが同じでない場合は、正しいエンコード (ページにあるもの) を使用して応答を再エンコードします。

コードフラグメント:

           // 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 回実行するにはどうすればよいでしょうか。

4

0 に答える 0