記憶盒子

把記憶裝進(jìn)灰色的盒子,封裝起來,那年那月,重新拾起。

首頁搜索目錄
search
當(dāng)前主題: 軟件編程

c#利用WebClient和WebRequest獲取網(wǎng)頁源代碼的比較

作者:Kaka    時間:2009-7-15 13:28:21    瀏覽:    評論:0

      前幾天舉例分析了用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://www.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://www.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();

x

標(biāo)簽: Asp.net  

※ 網(wǎng)站速度慢?試試網(wǎng)站自動優(yōu)化工具 ※

  • 擴(kuò)展閱讀
上一篇: 軟件編程中,什么是同步?什么是異步?
下一篇: 天籟之音Vitas的歌劇2 、鶴之泣和星星【現(xiàn)場版mv】

發(fā)表評論:

◎歡迎參與討論,請在這里發(fā)表您的看法、交流您的觀點。

訂閱博客                   QQ交流群(312716741)

  • 通過Google訂閱本站 通過鮮果訂閱本站 通過抓蝦訂閱本站
  • 通過QQ郵箱訂閱本站 通過Yahoo訂閱本站 通過有道訂閱本站

Search

最新評論及回復(fù)

最近留言

網(wǎng)站分類

Powered By Z-Blog 1.8 Walle Build 91204 Designed by Han'space

Copyright @2009-2024 All Rights Reserved. 粵ICP備14028160號-1

Powered By Z-Blog 1.8 Walle Build 91204
Copyright @2009-2024 All Rights Reserved.