ASP.NE请求网址并解析返回的html

发布时间:2020-06-19编辑:脚本学堂
ASP.NE请求网址并解析返回的html

功能实现:把远程服务器传回的Html,解析到类里面,为GridView等提供数据源。

1 、向远程服务器Post数据
public int PostData(string url, string data, out string info)
{
    info = "";
    CookieContainer cc = new CookieContainer();
    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    request.CookieContainer = cc;
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    Stream requestStream = request.GetRequestStream();
    byte[] byteArray = Encoding.UTF8.GetBytes(data);
    requestStream.Write(byteArray, 0, byteArray.Length);
    requestStream.Close();
    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    Uri responseUri = response.ResponseUri;
    Stream receiveStream = response.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    StreamReader readStream = new StreamReader(receiveStream, encode);
    string result = readStream.ReadToEnd();
    info = result;
    return 0;
}

2、解析返回的html
public ClassInfo[] GetClass(string html)
{
    ArrayList ar = new ArrayList();
    ArrayList arr = new ArrayList();
    string table = "";
    Regex regtable = new Regex(@"(?<=<table.*>).*?(?=</table>)", RegexOptions.Singleline);
    Match ma = regtable.Match(html);
    while (ma.Success)
    {
if (ma.Value.Trim() != "")
{
    arr.Add(HttpUtility.HtmlDecode(ma.Value));
}
ma = ma.NextMatch();
    }
    for (int i = 0; i < arr.Count; i++)
    {
table = arr[i].ToString() + table;
    }
    Regex reg = new Regex(@"(?<=<.*?>).*?(?=<.*?>)", RegexOptions.Singleline);
    Match m = reg.Match(table);
    while (m.Success)
    {
if (m.Value.Trim() != "")
{
    ar.Add(HttpUtility.HtmlDecode(m.Value));
}
m = m.NextMatch();
    }
   ClassInfo[] ci = new ClassInfo[classno];
    for (int i = 0; i < classno; i++)
    {
ci[i] = new ClassInfo();
ci[i].RegisterDate = (ar[i * 8 + 0]).ToString();
ci[i].LoginDate = (ar[i * 8 + 1]).ToString();
ci[i].LogoutDate = (ar[i * 8 + 2]).ToString();
ci[i].UseMin = ar[i * 8 + 3].ToString();
ci[i].ClassName = ar[i * 8 + 5].ToString();
ci[i].ClassType = ar[i * 8 + 6].ToString();
ci[i].Percent = ar[i * 8 + 7].ToString();
    }
    return ci;
}

3、定义ClassInfo类(课程类),用CodeSmith生成
public class ClassInfo
{
Member Variables#region Member Variables
protected string _loginDate;
protected string _logoutDate;
protected string _registerDate;
protected string _useMin;
protected string _className;
protected string _classType;
protected string _percent;
//protected string _nouse;
#endregion
Constructors#region Constructors
public ClassInfo() { }
public ClassInfo(string loginDate, string logoutDate, string registerDate, string useMin, string className, string classType, string percent)
{
    this._loginDate = loginDate;
    this._logoutDate = logoutDate;
    this._registerDate = registerDate;
    this._useMin = useMin;
    this._className = className;
    this._classType = classType;
    this._percent = percent;
}
#endregion
Public Properties#region Public Properties
//public string NoUse
//{
//    get{return _nouse;}
//    set{ _nouse= value;}
//}
public string LoginDate
{
    get { return _loginDate; }
    set { _loginDate = value; }
}
public string LogoutDate
{
    get { return _logoutDate; }
    set { _logoutDate = value; }
}
public string RegisterDate
{
    get { return _registerDate; }
    set { _registerDate = value; }
}
public string UseMin
{
    get { return _useMin; }
    set { _useMin = value; }
}
public string ClassName
{
    get { return _className; }
    set
    {
if (value != null && value.Length > 50)
    throw new ArgumentOutOfRangeException("Invalid value for ClassName", value, value.ToString());
_className = value;
    }
}
public string ClassType
{
    get { return _classType; }
    set
    {
if (value != null && value.Length > 50)
    throw new ArgumentOutOfRangeException("Invalid value for ClassType", value, value.ToString());
_classType = value;
    }
}
public string Percent
{
    get { return _percent; }
    set
    {
if (value != null && value.Length > 50)
    throw new ArgumentOutOfRangeException("Invalid value for Percent", value, value.ToString());
_percent = value;
    }
}
#endregion
    }