網上下載和上傳資料(二) Montaque(原作)

來源:互聯網
上載者:User
上傳|資料|下載 網上下載和上傳資料(二)    Montaque(原作)  
  
上一次介紹了WebClient的一些下載和上傳資料的方法,今天著重看一下WebRequest 和 WebResponse兩種我們訪問Internet常用的類,嚴格說,WebRequest是一個抽象基類,我們一般用它的衍生類HttpWebRequest 以及 FileWebRequest,FTP的訪問需要手動註冊,具體看後面的插入協議。

從邏輯角度上講,Net classes 包含三個層:請求/響應層、應用協議層和傳輸層,依次展開,從應用程式到網路。WebRequest 和 WebResponse 類代表請求/響應層。HTTP、TCP 和 UDP 類組成了應用協議層,而通訊端存在於傳輸層中。WebRequest/WebResponse 和 HTTP 可以在 System.Net 名稱空間中找到,而 TCP/UDP 和通訊端則處在 System.Net.Sockets 名稱空間中,包括也常用的UDPClient、TCPCLient。

WebRequest 和 WebResponse(請求/響應模型)

請求/響應模型位於頂部,提供一種簡單的方式訪問 Web 上的資源。WebRequest 是 .NET 架構的用於訪問 Internet 資料的請求/響應模型的抽象基類。使用該請求/響應模型的應用程式可以用協議不可知的方式從 Internet 請求資料,什麼意思?就是協議不具體。

這兩種類提供了一種訪問網上資源的一般方式。WebRequest 表示一個網路請求,包含諸如 RequestURI、Headers、Credentials 和 ContentType 等屬性。WebRequest 上的主要方法有 GetRequestStream、GetResponse 以及它們的非同步方法呼叫Begin/EndGetRequestStream 和 Begin/EndGetResponse。 GetRequestStream 用於擷取流以便將資料上傳到伺服器。GetResponse 用於擷取伺服器返回的響應對象。WebResponse 表示從處理該請求的伺服器接收回的響應。其關鍵屬性有 ContentLength、ContentType、headers、ResponseURI 和 Status。WebResponse 上最常用的方法是 GetResponseStream,它用於從伺服器讀取(下載)資料。  

當對 WebRequest.GetResponse 進行調用時,通常發出實際的網路請求。

這個樣本顯示如何擷取一個 Web 頁並將其內容輸出:

Dim url As New Uri("http://www.yahoo.com")  ‘定義一個URI

Dim Req As WebRequest

Req = WebRequest.Create(url)

Dim Resp As WebResponse

Try

Resp = Req.GetResponse ‘獲得一個響應

Catch exc As Exception

MsgBox(exc.Message)

End Try

Dim netStream As StreamReader

netStream = New StreamReader(Resp.GetResponseStream)

Debug.WriteLine(netStream.ReadToEnd)

當然,上面的例子只是一個簡單的操作,可以返回一個流式的資料。下面充分挖掘一下它們的優勢(與WebClient相比)。

可插入協議

當某個應用程式僅僅使用 WebRequest 和 WebResponse 類時,無需修改應用程式的任何代碼就可以“插入”和使用新的協議。註冊一個帶 WebRequestFactory 的 URI 模式在程式的期間插入入協議支援。註冊是通過調用 WebRequestFactory.Register() 方法完成的。對於 HTTP 協議,這種方法是從內部調用的,因此它被預設註冊;儘管如此,在將來可以實現和註冊任意數目的其他協議。當然,由於 Internet 上的協議數量巨大,這種模型並不是對所有的情況都理想。那些“饒舌”的或另外排斥請求/響應模型的協議可能會在 TCP 或 UDP 類中更好地執行,或者在某些情況下會在 Sockets 類中更好地執行。有關HTTP方面的操作我們可以使用HttpWebRequest。

下面說明幾個具體問題:

1. 程式分塊

當應用程式需要發送或接收資料,而資料的準確大小在下載/上傳開始時還未知時,程式分塊是有用的。當基於其他應用程式或伺服器邏輯正在建立所討論的資料時,使用程式分塊技術是最普遍的。要發送分塊的資料,應該將 WebRequest 轉換為 HttpWebRequest 並且將 HttpWebRequest.SendChunked 的屬性設定為TRUE。如果直接用HttpWebRequest自然就免了:)

2.HTTP 管道技術

管道技術是 HTTP 1.1 的一項功能,它允許 Net classes 通過持久性串連向後端伺服器發送多個 HTTP 要求,而無需在發出下次請求之前等待來自伺服器的響應。這會顯著影響效能,因為從伺服器請求多個資源的應用程式不會被阻塞而等待某個特定資源(可能是伺服器上一個非常耗時的操作,如資料庫尋找)。

3. 身分識別驗證
Net classes 支援各種客戶機身分識別驗證機制,包括“摘要”、“基本”、Kerberos、NTLM 和“定製”。身分識別驗證是通過在作出請求前對 WebRequest.Credentials 對象進行設定來達到的。在“摘要”和“基本”情況下,會指定使用者名稱和口令。對於 NTLM 或 Kerberos,則使用 Windows 安全機制,並且 Credential 對象或者可以被設定為使用者名稱、口令和域的結合,或者可以請求使用系統預設值。

4.代理支援
在 Net classes 中的 HTTP 代理支援可以在每個請求的基礎上進行控制,或者可以一次全域性地設定它,用於應用程式的生存期。這樣似乎就可以驗證Proxy是不是免費;)

總結:

    概述了一下訪問Internet的另外一種方法,Webresponse WebRequest,以及採用它的一些優勢。具體例子和圖解參考:http://www.microsoft.com/china/msdn/library/techart/pdc_websvc.ASP很不錯的一篇文章。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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