前幾天舉例分析了用asp+xmlhttp獲取網(wǎng)頁源代碼的方法,但c#中一般是可以利用WebClient類和WebRequest類獲取網(wǎng)頁源代碼。下面分別說明這兩種方法的實現(xiàn)。
WebClient類獲取網(wǎng)頁源代碼
WebClient類
WebClient類位于System.Net命名空間下,WebClient類提供向URI標(biāo)識的任何本地、Intranet或Internet資源發(fā)送數(shù)據(jù)以及從這些資源接收數(shù)據(jù)的公共方法。
源代碼
///引用命名空間
using System.IO;
using System.Net;
using System.Text;
PageUrl = "http://howtostagehomes.com"; //需要獲取源代碼的網(wǎng)頁
WebClient wc = new WebClient(); // 創(chuàng)建WebClient實例提供向URI 標(biāo)識的資源發(fā)送數(shù)據(jù)和從URI 標(biāo)識的資源接收數(shù)據(jù)
wc.Credentials = CredentialCache.DefaultCredentials; // 獲取或設(shè)置用于對向 Internet 資源的請求進(jìn)行身份驗證的網(wǎng)絡(luò)憑據(jù)。
///方法一:
Encoding enc = Encoding.GetEncoding("GB2312"); // 如果是亂碼就改成 utf-8 / GB2312
Byte[] pageData = wc.DownloadData(PageUrl); // 從資源下載數(shù)據(jù)并返回字節(jié)數(shù)組。
ContentHtml.Text = enc.GetString(pageData); // 輸出字符串(HTML代碼),ContentHtml為Multiline模式的TextBox控件
/// 方法二:
/// ***************代碼開始**********
/// Stream resStream = wc.OpenRead(PageUrl); //以流的形式打開URL
/// Encoding enc = Encoding.GetEncoding("GB2312"); // 如果是亂碼就改成 utf-8 / GB2312
/// StreamReader sr = new StreamReader(resStream,enc); //以指定的編碼方式讀取數(shù)據(jù)流
/// ContentHtml.Text = sr.ReadToEnd(); //輸出(HTML代碼),ContentHtml為Multiline模式的TextBox控件
/// resStream.Close();
/// **************代碼結(jié)束********
///
wc.Dispose();
WebRequest類獲取網(wǎng)頁源代碼
WebRequest類
WebRequest類是.NET Framework中“請求/響應(yīng)”模型的abstract基類,用于訪問Internet數(shù)據(jù)。使用WebRequest類請求/響應(yīng)模型的應(yīng)用程序可以用協(xié)議不可知的方式從Internet請求數(shù)據(jù),在這種方式下,應(yīng)用程序處理WebRequest類的實例,而協(xié)議特定的子類則執(zhí)行請求的具體細(xì)節(jié),請求從應(yīng)用程序發(fā)送到某個特定的URI,如服務(wù)器上的網(wǎng)頁。URI從一個為應(yīng)用程序注冊的WebRequest子類列表中確定要創(chuàng)建的適當(dāng)子類。注冊WebRequest子類通常是為了處理某個特定的協(xié)議(如HTTP或FTP),但是也可以注冊它以處理對特定服務(wù)器或服務(wù)器上的路徑的請求。
WebRequest類中最常用的是Create方法,Create方法用于為指定的URI方案初始化新的WebRequest實例。
語法:
public static WebRequest Create
(
string requestUriString
)
參數(shù):
requestUriString:標(biāo)識Internet資源的URI。
返回值:特定URI方案的WebRequest子類。
注意:Create方法將運行時確定的WebRequest類的子類作為與requestUri最接近的注冊匹配項返回。例如,當(dāng)以http://開頭的URI在requestUri中傳遞時,由Create返回一個HttpWebRequest。如果改為傳遞以file://開頭的URI,則Create方法將返回FileWebRequest實例。.NET Framework包括對http://和file:// URI方案的支持。
WebResponse類
WebResponse類是abstract基類,協(xié)議特定的響應(yīng)類從該抽象基類派生。應(yīng)用程序可以使用 WebResponse類的實例以協(xié)議不可知的方式參與請求和響應(yīng)事務(wù),而從WebResponse類派生的協(xié)議特定的類攜帶請求的詳細(xì)信息。
在WebResponse類中最常用的是GetResponse方法,GetResponse方法用于當(dāng)在子類中被重寫時,返回對 Internet 請求的響應(yīng)
語法:
public virtual WebResponse GetResponse ()
返回值:包含對Internet請求的響應(yīng)的WebResponse。
源代碼
///引用命名空間
using System.IO;
using System.Net;
using System.Text;
PageUrl = "http://howtostagehomes.com"; //需要獲取源代碼的網(wǎng)頁
WebRequest request = WebRequest.Create(PageUrl); //WebRequest.Create方法,返回WebRequest的子類HttpWebRequest
WebResponse response = request.GetResponse(); //WebRequest.GetResponse方法,返回對 Internet 請求的響應(yīng)
Stream resStream = response.GetResponseStream(); //WebResponse.GetResponseStream 方法,從 Internet 資源返回數(shù)據(jù)流。
Encoding enc = Encoding.GetEncoding("GB2312"); // 如果是亂碼就改成 utf-8 / GB2312
StreamReader sr = new StreamReader(resStream, enc); //命名空間:System.IO。 StreamReader 類實現(xiàn)一個 TextReader (TextReader類,表示可讀取連續(xù)字符系列的讀取器),使其以一種特定的編碼從字節(jié)流中讀取字符。
ContentHtml.Text = sr.ReadToEnd(); //輸出(HTML代碼),ContentHtml為Multiline模式的TextBox控件
resStream.Close();
sr.Close();