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を取得する ////// webページからHTMLを取得する /// /// 取得する webページアドレス /// HTML 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