从Internet上抓取指定URL的源码的方案(C#)

调用方式:

#region 测试获取远程网页

GetPageCode gpc = new GetPageCode();

gpc.Url="http://ppcode.com/";

gpc.ProxyState=1;//使用代理服务器,0为不使用,设置为1后下面的代理设置才起作用

gpc.ProxyAddress="http://proxyName.com";//代理服务器地址

gpc.ProxyPort="80";//代理服务器的端口

gpc.ProxyAccount="proxy";//代理服务器账号

gpc.ProxyPassword="password";//代理服务器密码

gpc.ProxyDomain="bqc";//代理服务器域

gpc.OutFilePath=filePath;//设置输出文件路径的地方,如果不设置,则返回字符串

gpc.GetSource();//处理

string tempErr=gpc.NoteMessage;//如果出错,这里会提示

string tempCode=gpc.OutString;//返回的字符串

#endregion

类代码:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Net;

using System.Text;

using System.Web;

 

  

namespace Test.Com

{

     /// <summary>

     /// 功能:取得Internet上的URL页的源码

     /// 创建:2004-03-22

     /// 作者:Rexsp MSN:yubo@x263.net

     /// </summary>

     public class GetPageCode

     {

         #region 私有变量

         /// <summary>

         /// 网页URL地址

         /// </summary>

         private string url=null;

         /// <summary>

         /// 是否使用代码服务器:0 不使用  1 使用代理服务器

         /// </summary>

         private int proxyState=0;

         /// <summary>

         /// 代理服务器地址

         /// </summary>

         private string proxyAddress=null;

         /// <summary>

         /// 代理服务器端口

         /// </summary>

         private string proxyPort=null;

         /// <summary>

         /// 代理服务器用户名

         /// </summary>

         private string proxyAccount=null;

         /// <summary>

         /// 代理服务器密码

         /// </summary>

         private string proxyPassword=null;

         /// <summary>

         /// 代理服务器域

         /// </summary>

         private string proxyDomain=null;

         /// <summary>

         /// 输出文件路径

         /// </summary>

         private string outFilePath=null;

         /// <summary>

         /// 输出的字符串

         /// </summary>

         private string outString=null;

         /// <summary>

         /// 提示信息

         /// </summary>

         private string noteMessage;

 

         #endregion

 

         #region 公共属性

         /// <summary>

         /// 欲读取的URL地址

         /// </summary>

         public string Url

         {

              get{return url;}

              set{url=value;}

         }

         /// <summary>

         /// 是否使用代理服务器标志

         /// </summary>

         public int ProxyState

         {

              get{return proxyState;}

              set{proxyState=value;}

         }

         /// <summary>

         /// 代理服务器地址

         /// </summary>

         public string ProxyAddress

         {

              get{return proxyAddress;}

              set{proxyAddress=value;}

         }

         /// <summary>

         /// 代理服务器端口

         /// </summary>

         public string ProxyPort

         {

              get{return proxyPort;}

              set{proxyPort=value;}

         }

         /// <summary>

         /// 代理服务器账号

         /// </summary>

         public string ProxyAccount

         {

              get{return proxyAccount;}

              set{proxyAccount=value;}

         }

         /// <summary>

         /// 代理服务器密码

         /// </summary>

         public string ProxyPassword

         {

              get{return proxyPassword;}

              set{proxyPassword=value;}

         }

         /// <summary>

         /// 代理服务器域

         /// </summary>

         public string ProxyDomain

         {

              get{return proxyDomain;}

              set{proxyDomain=value;}

         }

         /// <summary>

         /// 输出文件路径

         /// </summary>

         public string OutFilePath

         {

              get{return outFilePath;}

              set{outFilePath=value;}

         }

         /// <summary>

         /// 返回的字符串

         /// </summary>

         public string OutString

         {

              get{return outString;}

  

         }

         /// <summary>

         /// 返回提示信息

         /// </summary>

         public string NoteMessage

         {

              get{return noteMessage;}

  

         }

 

         #endregion

 

         #region 构造函数

         public GetPageCode()

         {

         }

         #endregion

 

         #region 公共方法

         /// <summary>

         /// 读取指定URL地址,存到指定文件中

         /// </summary>

         public void GetSource()

         {

              WebRequest request = WebRequest.Create(this.url);

              //使用代理服务器的处理

              if(this.proxyState==1)

              {

                   //默认读取80端口的数据

                   if(this.proxyPort==null)

                       this.ProxyPort="80";

 

                   WebProxy myProxy=new WebProxy();

                   myProxy = (WebProxy)request.Proxy;

                   myProxy.Address = new Uri(this.ProxyAddress+":"+this.ProxyPort);

                   myProxy.Credentials = new NetworkCredential(this.proxyAccount, this.proxyPassword, this.ProxyDomain);

                   request.Proxy = myProxy;

              }

              try

  

              {

                   //请求服务

                   WebResponse response = request.GetResponse();

                   //返回信息

                   Stream resStream = response.GetResponseStream();

                   StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);

                   string tempCode= sr.ReadToEnd();

                   resStream.Close();

                   sr.Close();

 

                   //如果输出文件路径为空,便将得到的内容赋给OutString属性

                   if(this.outFilePath==null)

                   {

                       this.outString=tempCode;

                   }

                   else

                   {

 

                       FileInfo fi = new FileInfo(this.outFilePath);

                       //如果存在文件则先干掉

                       if(fi.Exists)

                            fi.Delete();

  

                       StreamWriter sw = new StreamWriter(this.outFilePath,true,Encoding.Default);

                       sw.Write(tempCode);

                       sw.Flush();

                       sw.Close();

                   }

              }

              catch

              {

                   this.noteMessage="出错了,请检查网络是否连通;";

              }

 

 

         }

         #endregion

 

     }

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值