ASP.NET技巧:请求网址并解析返回的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
}