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(
)
定義一個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
下面說明幾個具體問題
. 程序分塊
當應用程序需要發送或接收數據
而數據的准確大小在下載/上載開始時還未知時
程序分塊是有用的
當基於其他應用程序或服務器邏輯正在創建所討論的數據時
使用程序分塊技術是最普遍的
要發送分塊的數據
應該將 WebRequest 轉換為 HttpWebRequest 並且將 HttpWebRequest
SendChunked 的屬性設置為TRUE
如果直接用HttpWebRequest自然就免了
)
.HTTP 管道技術
管道技術是 HTTP
的一項功能
它允許 Net classes 通過持久性連接向後端服務器發送多個 HTTP 請求
而無需在發出下次請求之前等待來自服務器的響應
這會顯著影響性能
因為從服務器請求多個資源的應用程序不會被阻塞而等待某個特定資源(可能是服務器上一個非常耗時的操作
如數據庫查找)
身份驗證
Net classes 支持各種客戶機身份驗證機制
包括
摘要
基本
Kerberos
NTLM 和
定制
身份驗證是通過在作出請求前對 WebRequest
Credentials 對象進行設置來達到的
在
摘要
和
基本
情況下
會指定用戶名和口令
對於 NTLM 或 Kerberos
則使用 Windows 安全機制
並且 Credential 對象或者可以被設置為用戶名
口令和域的結合
或者可以請求使用系統默認值
代理支持
在 Net classes 中的 HTTP 代理支持可以在每個請求的基礎上進行控制
或者可以一次全局性地設置它
用於應用程序的生存期
這樣似乎就可以驗證Proxy是不是免費;)
From:http://tw.wingwit.com/Article/program/net/201311/13051.html