WebClient與WebRequest差別

WebClient和HttpWebRequst是用來獲取數據的2種方式,通常而言,WebClient更傾向於「按需下載」,事實上掌握它也是相對容易的,而HttpWebRequst則容許你設置請求頭或者對內容須要更多的控制,後者有點相似於form中的submit。雖然二者都是異步請求事件,可是WebClient是基於事件的異步,而HttpWebRequst是基於代理的異步編程編程

WebClient封裝了一下便於使用,可是須要稍微細節一些的操做的時候,就得用WebResponse和WebRequest來操做了。好比要想控制TCP連接數,自定義HTTP請求頭或者Post自定義數據等等,HTTPWebRequest是專用於HTTP協議的WebRequest,想要靈活性選擇後者,簡單性選擇前者,2.0裏提供了FtpWebResponse...FileWebResponse,用起來可能選擇範圍更廣點。服務器

舉例以下:app

例如用WebClient類實現 異步

PageUrl = UrlText.Text; 
WebClient wc = new WebClient(); 
wc.Credentials = CredentialCache.DefaultCredentials;

Byte[] pageData = wc.DownloadData(PageUrl); 
ContentHtml.Text = Encoding.Default.GetString(pageData);

用WebRequest類實現
PageUrl = UrlText.Text; 
WebRequest request = WebRequest.Create(PageUrl); 
WebResponse response = request.GetResponse(); 
Stream resStream = response.GetResponseStream(); 
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default); 
ContentHtml.Text = sr.ReadToEnd(); 
resStream.Close(); 
sr.Close();

這兩段代碼實現一樣功能,區別在哪裏? WebRequest類 
命名空間: System.Net異步編程

 

發出對統一資源標識符 (URI) 的請求。這是一個抽象(在 Visual Basic 中爲 MustInherit)類。 
WebRequest 是 .NET Framework 的用於訪問 Internet 數據的請求/響應模型的抽象(在 Visual Basic 中爲 MustInherit)基類。使用該請求/響應模型的應用程序能夠用協議不可知的方式從 Internet 請求數據。在這種方式下,應用程序處理 WebRequest 類的實例,而協議特定的子類則執行請求的具體細節。url

請求從應用程序發送到某個特定的 URI,如服務器上的 Web 頁。URI 從一個爲應用程序註冊的 WebRequest 子代列表中肯定要建立的適當子類。註冊 WebRequest 子代一般是爲了處理某個特定的協議(如 HTTP 或 FTP),可是也能夠註冊它以處理對特定服務器或服務器上的路徑的請求。spa

WebClient 類: 
提供向 URI 標識的資源發送數據和從 URI 標識的資源接收數據的公共方法。不能繼承此類。 
WebClient 類提供向 URI 標識的任何本地、Intranet 或 Internet 資源發送數據以及從這些資源接收數據的公共方法。代理

WebClient 類使用 WebRequest 類提供對 Internet 資源的訪問。WebClient 實例能夠經過任何已向 WebRequest.RegisterPrefix 方法註冊的 WebRequest 子代訪問數據。 
詳細的,查看一下msdnnull WebClient 不支持超時設定,這一點太糟糕了。所以選用HttpWebRequest代替WebClient : HttpWebRequest畢竟是WebClient 的父類,所以POST起來比較麻煩。code

try 
{
 string valpairs="";
 valpairs="c="+textBox1.Text; 
 UTF8Encoding encoding=new UTF8Encoding(); 
 b = encoding.GetBytes(valpairs); 
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/t/default.aspx"); 
 request.Timeout=1000*5; 
 request.Method = "POST"; 
 request.ContentType="application/x-www-form-urlencoded"; 
 request.ContentLength=b.Length;

 ……

}
相關文章
相關標籤/搜索