原文: WebClient, HttpClient, HttpWebRequest ,RestSharp之間的差別與抉擇
NETCore提供了三種不同類型用于生産的REST API:
HttpWebRequest;
WebClient;
HttpClient
,開源社群建立了另一個名為
RestSharp的庫
。如此多的http庫,該怎樣選擇呢?
HttpWebRequest
這是.NET建立者最初開發用于使用HTTP請求的标準類。使用
HttpWebRequest可以讓開發者控制
請求/響應流程的各個方面,如 timeouts, cookies, headers, protocols。另一個好處是
HttpWebRequest
類不會阻塞UI線程。例如,當您從響應很慢的API伺服器下載下傳大檔案時,您的應用程式的UI不會停止響應。
然而,強大的個性化操作帶來了極大的複雜性。為了簡單起見,
GET
您需要至少五行代碼;
HttpWebRequest http = (HttpWebRequest)WebRequest.Create("http://example.com");
WebResponse response = http.GetResponse();
Stream stream = response.GetResponseStream();
using (var streamtemn = File.Create("路徑"))
{
stream.CopyTo(streamtemn);
}
如果對http協定不是了如指掌,使用HttpWebRequest會增加你的開發成本,除非你需要非常細節的處理和底層的控制,另外HttpWebRequest庫已經過時,不适合業務中直接使用,他更适用于架構内部操作。
WebClient
WebClient
是一種更進階别的抽象,是
HttpWebRequest
為了簡化最常見任務而建立的,使用過程中你會發現他缺少基本的header,timeoust的設定,不過這些可以通過繼承httpwebrequest來實作。使用
WebClient
可能比
HttpWebRequest
直接使用更慢(大約幾毫秒)。但這種“低效率”帶來了巨大的好處:它需要更少的代碼和隐藏了細節處理,更容易使用,并且在使用它時你不太可能犯錯誤。同樣的請求示例現在很簡單隻需要兩行而且内部周到的處理完了細節:
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile("http://example.com", "路徑");
}
HttpClient
HttpClient
提供強大的功能,提供了異步支援,可以輕松配合async await 實作異步請求,具體使用可參考:NetCore 2.1中的HttpClientFactory最佳實踐
RestSharp
restsharp是開源社群貢獻,具有HttpWebRequest的細節控制和
WebClient的使用簡單的優點進而讓他功能強大的同時又簡化了操作(從他定義的接口可以看出真是一個優秀的http庫啊?)
結論
-
已經不推薦直接使用了,這已經作為底層機制,不适合業務代碼使用HttpWebRequest
-
不想為http細節處理而頭疼的coder而生,由于内部已經處理了通用設定,某些情況可能導緻性能不是很理想WebClient
-
兼具強大功能和友好api很适合業務中使用RestSharp
-
更加适用于異步程式設計模型中HttpClient
參考:
https://stackoverflow.com/questions/22791376/is-httpwebrequest-or-webclient-faster/22792326#22792326
https://stackoverflow.com/questions/20530152/deciding-between-httpclient-and-webclient
https://social.msdn.microsoft.com/Forums/vstudio/en-US/2ce80a71-1ced-4bcd-adb4-88eef6e6a42d/httpclient-vs-httpwebrequest?forum=wcf
https://stackify.com/restsharp/?utm_referrer=https%3A%2F%2Fwww.google.com%2F