您的位置:首页精文荟萃软件资讯 → 从Internet上抓取指定URL的源码的方案C#

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

时间:2004/10/8 13:17:00来源:本站整理作者:蓝点我要评论(0)

引言:
  在做无线项目的时候,与通讯公司的数据通讯有一部分是通过XML交互的,所以必须要动态抓取通讯公司提供的固定的Internet上的数据,便研究了一下如何抓取固定url上的数据,现与大家分享一下。
  类名GetPageCode,有一个方法GetSource,通过属性传递参数,入参控制的是要取得URL的地址,代理服务器的设置及输出方式的控制,这里大家可以再扩展自己的需要,我这里只提供了两种方式,一种是直接写到本地的某个文件中,另外一种就是返回字符串的。类里已经作了比较详细的注释,我想大家很容易就看明白了,如果实在不明白,那就msn上问吧,MSN:yubo@x263.net


调用方式:
#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
{
 ///


 /// 功能:取得Internet上的URL页的源码
 /// 创建:2004-03-22
 /// 作者:Rexsp MSN:yubo@x263.net
 ///

 public class GetPageCode
 {
  #region 私有变量
  ///
  /// 网页URL地址
  ///

  private string url=null;
  ///
  /// 是否使用代码服务器:0 不使用  1 使用代理服务器
  ///

  private int proxyState=0;
  ///
  /// 代理服务器地址
  ///

  private string proxyAddress=null;
  ///
  /// 代理服务器端口
  ///

  private string proxyPort=null;
  ///
  /// 代理服务器用户名
  ///

  private string proxyAccount=null;
  ///
  /// 代理服务器密码
  ///

  private string proxyPassword=null;
  ///
  /// 代理服务器
  ///

  private string proxyDomain=null;
  ///
  /// 输出文件路径
  ///

  private string outFilePath=null;
  ///
  /// 输出的字符串
  ///

  private string outString=null;
  ///
  /// 提示信息
  ///

  private string noteMessage;


  #endregion


  #region 公共属性
  ///


  /// 欲读取的URL地址
  ///

  public string Url
  {
   get{return url;}
   set{url=value;}
  }
  ///
  /// 是否使用代理服务器标志
  ///

  public int ProxyState
  {
   get{return proxyState;}
   set{proxyState=value;}
  }
  ///
  /// 代理服务器地址
  ///

  public string ProxyAddress
  {
   get{return proxyAddress;}
   set{proxyAddress=value;}
  }
  ///
  /// 代理服务器端口
  ///

  public string ProxyPort
  {
   get{return proxyPort;}
   set{proxyPort=value;}
  }
  ///
  /// 代理服务器账号
  ///

  public string ProxyAccount
  {
   get{return proxyAccount;}
   set{proxyAccount=value;}
  }
  ///
  /// 代理服务器密码
  ///

  public string ProxyPassword
  {
   get{return proxyPassword;}
   set{proxyPassword=value;}
  }
  ///
  /// 代理服务器
  ///

  public string ProxyDomain
  {
   get{return proxyDomain;}
   set{proxyDomain=value;}
  }
  ///
  /// 输出文件路径
  ///

  public string OutFilePath
  {
   get{return outFilePath;}
   set{outFilePath=value;}
  }
  ///
  /// 返回的字符串
  ///

  public string OutString
  {
   get{return outString;}
  
  }
  ///
  /// 返回提示信息
  ///

  public string NoteMessage
  {
   get{return noteMessage;}
  
  }
 
  #endregion
 
  #region 构造函数
  public GetPageCode()
  {
  }
  #endregion


  #region 公共方法
  ///


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

  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


 }
}


 


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本