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; …… }