WebClient, HttpClient, HttpWebRequest ,RestSharp之間的區別與抉擇
NETCore提供了三種不同類型用於生產的REST API: HttpWebRequest;
WebClient;
HttpClient
,開源社區創建了另一個名為RestSharp的庫
。如此多的http庫,該怎樣選擇呢?
HttpWebRequest
這是.NET創建者最初開發用於使用HTTP請求的標準類。使用HttpWebRequest可以讓開發者控制
請求/響應流程的各個方面,如 timeouts, cookies, headers, protocols。另一個好處是HttpWebRequest
然而,強大的個性化操作帶來了極大的復雜性。為了簡單起見,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
為了簡化最常見任務而創建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之間的區別與抉擇