webページからHTMLを取得する

 



#region Streamからbyte[]で読みbyte[]への追加
        //Streamからbyte[]で読み込む
        private byte[] ReadBytes(Stream stream)
        {
            var buf = new byte[0];
            var tmp = new byte[1024];
            while (true)
            {
                var len = stream.Read(tmp, 0, 1024);
                if (len < = 0)
                    break;
                buf = AppendBuffer(buf, tmp, len);
            }
            return buf;
        }
        //byte[]への追加
        private byte[] AppendBuffer(byte[] buf, byte[] tmp, int len)
        {
            var res = new byte[buf.Length + len];
            Buffer.BlockCopy(buf, 0, res, 0, buf.Length);
            Buffer.BlockCopy(tmp, 0, res, buf.Length, len);
            return res;
        }
        #endregion

  #region webページからHTMLを取得する
        /// <summary>
        /// webページからHTMLを取得する
        /// 
        /// <param name="adress"/>取得する webページアドレス
        /// <returns>HTML</returns>

        public string GetHttp(string adress)
        {

            string str = "";

            try
            {
                //HTTPリクエスト
                var req = HttpWebRequest.Create(adress);
                req.Timeout = 15000;//タイムアウト(15秒)
                //HTPレスポンス
                var res = (HttpWebResponse)req.GetResponse();

                //byte [] で読み込む
                var buf = ReadBytes(res.GetResponseStream());
                //デフォルトをASCIIとする
                var encoding = Encoding.ASCII;

                //ASCIIでstringに変換する
                str = encoding.GetString(buf);

                //1行ごとMETAヘッダにcharesetの指定がないかを検索する
                foreach (var s in str.Split('\n'))
                {
                    var l = s.ToUpper();

                    l = noby.SeikiNuku(l, "(CHARSET)([ =]+)([-A-Z_0-9]+)", 3);

                    if (l != "")
                    {
                        encoding = Encoding.GetEncoding(l);
                        //取得したエンコードでstringへの変換をやり直す
                        str = encoding.GetString(buf);
                        break;
                    }

                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            //return str.Replace("\n", "").Replace("\r\n", "").Replace(" ", "").Replace("					", ""); 

            return str;

        }



        #endregion

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください