有時候,處于程序的需要,程序要求動態的從網絡上更新數據,最常見的比如從數據中心下載或上傳企業內部數據或者資料;有時候,想做一些類似機器人的工作,讓程序自動獲取IntraNet亦或InterNet上的資源,可能是新聞、圖片、以及你想得到的……這個時候就需要編一些小程序。
今天我主要介紹一下在.NET中如何獲取網絡上的數據,當然可以是局域網,甚至Local 文件系統。利用WebClient類,易如反掌!
關于WebClient:
在MSDN中,這樣描述WebClient類:
“提供向 URI 標識的資源發送數據和從 URI 標識的資源接收數據的公共方法”, 默認情況下,.NET 框架支持以 http:、https: 和 file: 方案標識符開頭的 URI。是不是封裝了很多我們想要實現的過程?呵呵??匆幌滤闹饕蓡T:
成員 | 類型 | 描述 |
BaseURI | 屬性 | 當前的URL地址 |
DownloadData | 方法 | 從一個URI下載數據,以字節數組的形式返回 |
DownloadFile | 方法 | 從一個URI下載數據,保存為本地文件 |
OpenRead | 方法 | 以流的形式打開并執行讀操作 |
OpenWrite | 方法 | 打開一個流用于向URI寫數據 |
UploadData | 方法 | 向URI上傳數據 |
UploadFile | 方法 | 把一個本地文件上載到制定URI |
UploadValues | 方法 | NameValueCollection 發送到資源并返回包含任何響應的字節數組 |
具體看一下如何下載文件或數據:
WebClient提供了大概三種方式從網上下載數據:
1. DownloadData
從資源下載數據并返回字節數組。
Public Function DownloadData( ByVal address As String ) As Byte()
接受一個參數,address是從中下載數據的 URI。注意返回的是一個字節數組,我在以前的文章中提到過很多次,我們可以很簡單的轉換為我們需要的格式。
看一個代碼:
Dim wc As New System.Net.WebClient() ‘跟網絡相關的類一般都在System.Net下
Dim html As String = Encoding.ASCII.GetString(wc.DownloadData("http:www.csdn.net"))
Debug.WriteLine(html)
你就會得到很長的一個String,實際上就是CSDN第一頁的源代碼。
2.
DownloadFile
從具有指定 URI 的資源將數據下載到本地文件
Public Sub DownloadFile( ByVal address As String, ByVal fileName As String )
address :從中下載數據的 URI。
FileName :要接收數據的本地文件的名稱。
使用也很簡單:
Dim wc As New System.Net.WebClient()
wc.DownloadFile("http://www.csdn.net/images/ad/vsnet_120.gif","c:\test.gif")
成功運行后,本地機的C:\會多出一個小圖片,就是VS.NET 4CD的廣告。
3. OpenRead
為從具有指定 URI 的資源下載的數據打開一個可讀的流。
Public Function OpenRead(ByVal address As String ) As Stream
參數
address 從中下載數據的 URI。
流的概念熟悉嗎?不熟的話看一下我以前的文章吧,很基本的操作都有。
下面的示例打開由 uriString 標識的資源并將結果顯示在系統控制臺上。請注意,由 OpenRead 返回的 Stream 在讀取完數據之后將被關閉。
Dim myWebClient As New System.Net.WebClient()
Dim uriString As String="http://www.csdn.net"
Console.WriteLine("Aclearcase/" target="_blank" >ccessing {0} ...", uriString)
Dim myStream As Stream = myWebClient.OpenRead(uriString)
Console.WriteLine(ControlChars.Cr + "Displaying Data :" + ControlChars.Cr)
Dim sr As New StreamReader(myStream)
Console.WriteLine(sr.ReadToEnd())
myStream.Close()
上傳數據
有下載必然有上傳,同樣對應的WebClient也有很多中上傳數據的方法,除了跟上面對應的UploadData、UploadFile、OpenWrite外還有一種UploadValues,UploadValues將NameValueCollection 發送到資源并返回包含任何響應的字節數組,可以用于那些有表單的網頁。
例子就不寫了,MSDN中ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemnetwebclientclasstopic.htm都有詳細的介紹,在此不再贅述。
總結:
簡單介紹了WebClient的主要方法和應用,實際上WebClient可以完成一些比較簡單的操作,試想,如果服務器要求我們輸入密碼和用戶名才能訪問怎么辦?或者其他的編程細節要處理?那就是我們下次介紹的WebRequest 和 WebResponse。