引言
在做無線項(xiàng)目的時(shí)候,與通訊公司的數(shù)據(jù)通訊有一部分是通過XML交互的,所以必須要?jiǎng)討B(tài)抓取通訊公司提供的固定的Internet上的數(shù)據(jù),便研究了一下如何抓取固定url上的數(shù)據(jù),現(xiàn)與大家分享一下。
類名GetPageCode,有一個(gè)方法GetSource,通過屬性傳遞參數(shù),入?yún)⒖刂频氖且〉肬RL的地址,代理服務(wù)器的設(shè)置及輸出方式的控制,這里大家可以再擴(kuò)展自己的需要,我這里只提供了兩種方式,一種是直接寫到本地的某個(gè)文件中,另外一種就是返回字符串的。類里已經(jīng)作了比較詳細(xì)的注釋,我想大家很容易就看明白了,如果實(shí)在不明白, 那就msn上問吧,MSN:yubo@x263.net。
調(diào)用方式:
#region 測試獲取遠(yuǎn)程網(wǎng)頁
在做無線項(xiàng)目的時(shí)候,與通訊公司的數(shù)據(jù)通訊有一部分是通過XML交互的,所以必須要?jiǎng)討B(tài)抓取通訊公司提供的固定的Internet上的數(shù)據(jù),便研究了一下如何抓取固定url上的數(shù)據(jù),現(xiàn)與大家分享一下。
類名GetPageCode,有一個(gè)方法GetSource,通過屬性傳遞參數(shù),入?yún)⒖刂频氖且〉肬RL的地址,代理服務(wù)器的設(shè)置及輸出方式的控制,這里大家可以再擴(kuò)展自己的需要,我這里只提供了兩種方式,一種是直接寫到本地的某個(gè)文件中,另外一種就是返回字符串的。類里已經(jīng)作了比較詳細(xì)的注釋,我想大家很容易就看明白了,如果實(shí)在不明白, 那就msn上問吧,MSN:yubo@x263.net。
調(diào)用方式:
#region 測試獲取遠(yuǎn)程網(wǎng)頁
GetPageCode gpc = new GetPageCode(); gpc.Url="http://ppcode.com"; gpc.ProxyState=1;//使用代理服務(wù)器,0為不使用,設(shè)置為1后下面的代理設(shè)置才起作用 gpc.ProxyAddress="http://proxyName.com";//代理服務(wù)器地址 gpc.ProxyPort="80";//代理服務(wù)器的端口 gpc.ProxyAccount="proxy";//代理服務(wù)器賬號 gpc.ProxyPassword="password";//代理服務(wù)器密碼 gpc.ProxyDomain="bqc";//代理服務(wù)器域 gpc.OutFilePath=filePath;//設(shè)置輸出文件路徑的地方,如果不設(shè)置,則返回字符串 gpc.GetSource();//處理 string tempErr=gpc.NoteMessage;//如果出錯(cuò),這里會提示 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頁的源碼 /// 創(chuàng)建:2004-03-22 /// 作者:Rexsp MSN:yubo@x263.net /// </summary> public class GetPageCode { #region 私有變量 /// <summary> /// 網(wǎng)頁URL地址 /// </summary> private string url=null; /// <summary> /// 是否使用代碼服務(wù)器:0 不使用 1 使用代理服務(wù)器 /// </summary> private int proxyState=0; /// <summary> /// 代理服務(wù)器地址 /// </summary> private string proxyAddress=null; /// <summary> /// 代理服務(wù)器端口 /// </summary> private string proxyPort=null; /// <summary> /// 代理服務(wù)器用戶名 /// </summary> private string proxyAccount=null; /// <summary> /// 代理服務(wù)器密碼 /// </summary> private string proxyPassword=null; /// <summary> /// 代理服務(wù)器域 /// </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> /// 是否使用代理服務(wù)器標(biāo)志 /// </summary> public int ProxyState { get{return proxyState;} set{proxyState=value;} } /// <summary> /// 代理服務(wù)器地址 /// </summary> public string ProxyAddress { get{return proxyAddress;} set{proxyAddress=value;} } /// <summary> /// 代理服務(wù)器端口 /// </summary> public string ProxyPort { get{return proxyPort;} set{proxyPort=value;} } /// <summary> /// 代理服務(wù)器賬號 /// </summary> public string ProxyAccount { get{return proxyAccount;} set{proxyAccount=value;} } /// <summary> /// 代理服務(wù)器密碼 /// </summary> public string ProxyPassword { get{return proxyPassword;} set{proxyPassword=value;} } /// <summary> /// 代理服務(wù)器域 /// </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 構(gòu)造函數(shù) public GetPageCode() { } #endregion #region 公共方法 /// <summary> /// 讀取指定URL地址,存到指定文件中 /// </summary> public void GetSource() { WebRequest request = WebRequest.Create(this.url); //使用代理服務(wù)器的處理 if(this.proxyState==1) { //默認(rèn)讀取80端口的數(shù)據(jù) 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 { //請求服務(wù) 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(); //如果輸出文件路徑為空,便將得到的內(nèi)容賦給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="出錯(cuò)了,請檢查網(wǎng)絡(luò)是否連通;"; } } #endregion } } |