1. 程式人生 > >WebClient, HttpClient, HttpWebRequest ,RestSharp之間的區別與抉擇

WebClient, HttpClient, HttpWebRequest ,RestSharp之間的區別與抉擇

模型 cnblogs -o 錯誤 最佳實踐 抉擇 googl factory 實現

原文: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 已經不推薦直接使用了,這已經作為底層機制,不適合業務代碼使用
  • WebClient 不想為http細節處理而頭疼的coder而生,由於內部已經處理了通用設置,某些情況可能導致性能不是很理想
  • RestSharp 兼具強大功能和友好api很適合業務中使用
  • 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

WebClient, HttpClient, HttpWebRequest ,RestSharp之間的區別與抉擇