#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