c#利用WebClient和WebRequest獲取網頁原始碼

xuxubaby發表於2013-10-14
C#中一般是可以利用WebClient類和WebRequest類獲取網頁原始碼。下面分別說明這兩種方法的實現。
WebClient類獲取網頁原始碼
WebClient類
  WebClient類位於System.Net名稱空間下,WebClient類提供向URI標識的任何本地、Intranet或Internet資源傳送資料以及從這些資源接收資料的公共方法。
原始碼
///引用名稱空間
using System.IO;
using System.Net;
using System.Text;


PageUrl = "http://www.webkaka.com"; //需要獲取原始碼的網頁
WebClient wc = new WebClient(); // 建立WebClient例項提供向URI 標識的資源傳送資料和從URI 標識的資源接收資料
wc.Credentials = CredentialCache.DefaultCredentials; // 獲取或設定用於對向 Internet 資源的請求進行身份驗證的網路憑據。

///方法一:
Encoding enc = Encoding.GetEncoding("GB2312"); // 如果是亂碼就改成 utf-8 / GB2312
Byte[] pageData = wc.DownloadData(PageUrl); // 從資源下載資料並返回位元組陣列。
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); //以指定的編碼方式讀取資料流
/// ContentHtml.Text = sr.ReadToEnd(); //輸出(HTML程式碼),ContentHtml為Multiline模式的TextBox控制元件
/// resStream.Close();
/// **************程式碼結束********
///
wc.Dispose();
WebRequest類獲取網頁原始碼
WebRequest類
WebRequest類是.NET Framework中“請求/響應”模型的abstract基類,用於訪問Internet資料。使用WebRequest類請求/響應模型的應用程式可以用協議不可知的方式從Internet請求資料,在這種方式下,應用程式處理WebRequest類的例項,而協議特定的子類則執行請求的具體細節,請求從應用程式傳送到某個特定的URI,如伺服器上的網頁。URI從一個為應用程式註冊的WebRequest子類列表中確定要建立的適當子類。註冊WebRequest子類通常是為了處理某個特定的協議(如HTTP或FTP),但是也可以註冊它以處理對特定伺服器或伺服器上的路徑的請求。
WebRequest類中最常用的是Create方法,Create方法用於為指定的URI方案初始化新的WebRequest例項。
  語法:
public static WebRequest Create
(
  string requestUriString
)
  引數:
  requestUriString:標識Internet資源的URI。
  返回值:特定URI方案的WebRequest子類。
  注意:Create方法將執行時確定的WebRequest類的子類作為與requestUri最接近的註冊匹配項返回。例如,當以http://開頭的URI在requestUri中傳遞時,由Create返回一個HttpWebRequest。如果改為傳遞以file://開頭的URI,則Create方法將返回FileWebRequest例項。.NET Framework包括對http://和file:// URI方案的支援。
WebResponse類
  WebResponse類是abstract基類,協議特定的響應類從該抽象基類派生。應用程式可以使用 WebResponse類的例項以協議不可知的方式參與請求和響應事務,而從WebResponse類派生的協議特定的類攜帶請求的詳細資訊。
  在WebResponse類中最常用的是GetResponse方法,GetResponse方法用於當在子類中被重寫時,返回對 Internet 請求的響應
  語法:
  public virtual WebResponse GetResponse ()
  返回值:包含對Internet請求的響應的WebResponse。
原始碼
///引用名稱空間
using System.IO;
using System.Net;
using System.Text;

PageUrl = "http://www.2cto.com "; //需要獲取原始碼的網頁
WebRequest request = WebRequest.Create(PageUrl); //WebRequest.Create方法,返回WebRequest的子類HttpWebRequest
WebResponse response = request.GetResponse(); //WebRequest.GetResponse方法,返回對 Internet 請求的響應
Stream resStream = response.GetResponseStream(); //WebResponse.GetResponseStream 方法,從 Internet 資源返回資料流。
Encoding enc = Encoding.GetEncoding("GB2312"); // 如果是亂碼就改成 utf-8 / GB2312
StreamReader sr = new StreamReader(resStream, enc); //名稱空間:System.IO。 StreamReader 類實現一個 TextReader (TextReader類,表示可讀取連續字元系列的讀取器),使其以一種特定的編碼從位元組流中讀取字元。
ContentHtml.Text = sr.ReadToEnd(); //輸出(HTML程式碼),ContentHtml為Multiline模式的TextBox控制元件
resStream.Close();
sr.Close();

相關文章