ASP.NET技巧:请求网址并解析返回的html

所属分类: 网络编程 / ASP.NET 阅读数: 1959
收藏 0 赞 0 分享

  目的,把远程服务器传回的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
    }

 

更多精彩内容其他人还在看

.NET Core源码解析配置文件及依赖注入

这篇文章我们设计了一些复杂的概念,因为要对ASP.NET Core的启动及运行原理、配置文件的加载过程进行分析,依赖注入,控制反转等概念的讲解等
收藏 0 赞 0 分享

.NET Corek中Git的常用命令及实战演练

这篇文章将通过故事的形式从Git的历史谈起,并讲述Git的强大之处。然后通过实战演练教你如何在Github以及码云上托管我们的代码并进行代码的版本控制
收藏 0 赞 0 分享

Asp.Net Core WebAPI使用Swagger时API隐藏和分组详解

这篇文章主要给大家介绍了关于Asp.Net Core WebAPI使用Swagger时API隐藏和分组的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Asp.Net Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

如何利用FluentMigrator实现数据库迁移

这篇文章主要给大家介绍了关于如何利用FluentMigrator实现数据库迁移的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

ASP.NET Core利用Jaeger实现分布式追踪详解

这篇文章主要给大家介绍了关于ASP.NET Core利用Jaeger实现分布式追踪的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

浅谈从ASP.NET Core2.2到3.0你可能会遇到这些问题

这篇文章主要介绍了ASP.NET Core2.2到3.0可能会遇到的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解.net core webapi 前后端开发分离后的配置和部署

这篇文章主要介绍了.net core webapi 前后端开发分离后的配置和部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁

这篇文章主要介绍了ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

.net 4.5部署到docker容器的完整步骤

这篇文章主要给大家介绍了关于.net 4.5部署到docker容器的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用.net4.5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

.net core并发下线程安全问题详解

这篇文章主要给大家介绍了关于.net core并发下线程安全问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.net core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多