c#利用WebClient和WebRequest擷取網頁原始碼的比較

來源:互聯網
上載者:User

標籤:

 前幾天舉例分析了用asp+xmlhttp擷取網頁原始碼的方法,但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.webkaka.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();

c#利用WebClient和WebRequest擷取網頁原始碼的比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.