获取远程网页的内容之二(downmoon原创)

所属分类: 网络编程 / ASP.NET 阅读数: 1686
收藏 0 赞 0 分享
本文仅针AD下代理上网的情况:
代码如下:
1、定义变量:

 定义变量#region  定义变量 
复制代码 代码如下:

private    string strFireWallIP 
        ...{ 
            get 
            ...{ 
                return System.Configuration.ConfigurationSettings.AppSettings["strFireWallIP"]; 
            } 
        } 
        private    string strFireWallPort 
        ...{ 
            get 
            ...{ 
                return System.Configuration.ConfigurationSettings.AppSettings["strFireWallPort"]; 
            } 
        } 
        private    string strUID 
        ...{ 
            get 
            ...{ 
                return System.Configuration.ConfigurationSettings.AppSettings["strUID"]; 
            } 
        } 
        private    string strPWD 
        ...{ 
            get 
            ...{ 
                return System.Configuration.ConfigurationSettings.AppSettings["strPWD"]; 
            } 
        } 
        private    string strDomain 
        ...{ 
            get 
            ...{ 
                return System.Configuration.ConfigurationSettings.AppSettings["strDomain"]; 
            } 
        } 
        #endregion 



方法:
获取指定远程网页内容 

 
复制代码 代码如下:

/**//// <summary> 
        /// 获取指定远程网页内容 
        /// </summary> 
        /// <param name="strUrl">所要查找的远程网页地址</param> 
        /// <returns></returns> 
        //[WebMethod(Description = "获取指定远程网页内容。")] 
        public string getPageContent(string strUrl) 
        ...{ 
            string strResult        =    ""; 
            this.CurrentUrl    =     strUrl; 
            if(this.CurrentUrl.ToLower().StartsWith("http://")==false) 
                this.CurrentUrl = "http://"+this.CurrentUrl; 
            try 
            ...{ 
                contentBytes    = GetHtmlByte(CurrentUrl); 

            } 
            catch(Exception err) 
            ...{ 
                strResult = "请求错误:" + err.Message; 
            } 
            if(contentBytes==null) 
            ...{ 
                throw new Exception("没有获得返回值"); 
            } 
            strResult        =    getStringFromByteArray(contentBytes,Encoding.UTF8); 
            return strResult; 
        } 




获取指定远程网页元素字节数组::

 获取指定远程网页元素字节数组#region 获取指定远程网页元素字节数组 
      
复制代码 代码如下:

  /**//// <summary> 
        /// 获取指定远程网页元素字节数组 
        /// </summary> 
        /// <param name="strUrl">所要查找的远程网页地址</param> 
        /// <returns></returns> 
        private byte[] GetHtmlByte(string strUrl) 
        ...{ 
            string strPara=(strUrl.IndexOf("?")>=0?strUrl.Substring(strUrl.IndexOf("?")+1):""); 
            System.Text.Encoding encoding    =    new UTF8Encoding(); 
            byte[]  byte1                    =    encoding.GetBytes(strPara); 
            byte[]    byteReturn                =    new byte[10000000]; 
            if(strUrl.Trim().ToLower().StartsWith("http://")==false) 
            ...{ 
                strUrl = "http://"+strUrl; 
            } 
            HttpWebRequest myHttpWebRequest        =    (HttpWebRequest)WebRequest.Create(strUrl); 
            myHttpWebRequest.AllowAutoRedirect    =    true;        
            myHttpWebRequest.KeepAlive            =    true; 
            myHttpWebRequest.UserAgent            =    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)"; 
            System.Net .WebProxy  proxy = new WebProxy(strFireWallIP+":"+strFireWallPort,true); 
            //proxy=(WebProxy)System.Net.GlobalProxySelection.Select; 
            System.Net.NetworkCredential myCredential = new NetworkCredential(strUID,strPWD,strDomain); 
            proxy.Credentials =myCredential; 
            myHttpWebRequest.Proxy = proxy; 


            HttpWebResponse myHttpWebResponse    =    (HttpWebResponse)myHttpWebRequest.GetResponse(); 
            byte[] bRead    =    new byte[1024]; 
            int lngCount    =    1; 
            int totalLen    =    0; 
            Stream recWeb    =    myHttpWebResponse.GetResponseStream();    
            lngCount        =    recWeb.Read(bRead,0,1024); 
            while(lngCount>0) 
            ...{ 
                Array.Copy(bRead,0,byteReturn,totalLen,lngCount); 
                totalLen    +=    lngCount; 
                lngCount    =    recWeb.Read(bRead,0,1024); 
            } 
            recWeb.Close(); 
            byte[] byteGets =    new byte[totalLen]; 
            Array.Copy(byteReturn,0,byteGets,0,totalLen); 
            byteReturn        =    null; 
            bRead            =    null; 

            return byteGets; 
        } 
        #endregion 


 

转换指定字节数组为字符串::

     转换指定字节数组为字符串#region 转换指定字节数组为字符串 
       
复制代码 代码如下:

 /**//// <summary> 
        /// 转换指定字节数组为字符串 
        /// </summary> 
        /// <param name="ByteGet">字节数组Byte[]</param> 
        /// <param name="myEncoding">编码方式</param> 
        /// <returns></returns> 
        private static string getStringFromByteArray(Byte[] ByteGet,Encoding myEncoding) 
        ...{ 
            int i,lngCount; 
            StringBuilder aTemp = new StringBuilder(10000); 
            lngCount = ByteGet.Length; 
            for(i = 0;i<lngCount;i+= 10000) 
            ...{ 
                aTemp.Append(myEncoding.GetString(ByteGet,i,(lngCount>=i+10000?10000:lngCount - i))); 
            } 
            if(i<=lngCount) 
            ...{ 
                aTemp.Append(myEncoding.GetString(ByteGet,i,(lngCount - i))); 
            } 
            return aTemp.ToString(); 
        } 

        #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 分享
查看更多