.NET 下主要有三种方式可以进行网络请求相关操作,它们分别是
HttpWebRequest
,WebClient
和
HttpClient
。这三者的关系是不断递进发展的,所以一般使用
HttpClient
来进行网络请求。
本文主要讲述 HttpClient
的使用方法和进度获取。
比较
命名空间 |
System.Net |
System.Net |
System.Net.Http |
继承类 |
WebRequest |
Component |
HttpMessageInvoker |
支持url转向 |
是 |
否 |
是 |
支持cookie和session |
是 |
否 |
否 |
支持用户代理服务器 |
是 |
否 |
是 |
使用复杂度 |
高 |
低 |
低 |
HttpClient 使用方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| { HttpClientHandler handler = new HttpClientHandler(); ProgressMessageHandler progressMessageHandler = new ProgressMessageHandler(handler); progressMessageHandler.HttpReceiveProgress += ProgressMessageHandler_HttpProgress; progressMessageHandler.HttpSendProgress += ProgressMessageHandler_HttpProgress; HttpClient httpClient = new HttpClient(progressMessageHandler) { Timeout = TimeSpan.FromMinutes(60) }; using (MultipartFormDataContent multipartFormData = new MultipartFormDataContent()) { multipartFormData.Add(new StreamContent(fileInfo.OpenRead()), "file", fileInfo.Name); HttpResponseMessage resMessage = httpClient.PutAsync(uploadUrl, multipartFormData).GetAwaiter().GetResult(); if (!resMessage.IsSuccessStatusCode) { resultUrls.Add(resMessage.ReasonPhrase); continue; } } }
private void ProgressMessageHandler_HttpProgress(object sender, HttpProgressEventArgs e) { }
|
ProgressMessageHandler 位于 System.Net.Http.Formatting.dll
程序集中。一般系统没有自带该类库,要从网上自行下载。
✈
点击下载
参考
- WebClient,
HttpClient, HttpWebRequest的比较