可以为 HttpClient 提供多个 HTTP 消息处理程序吗?
Posted
技术标签:
【中文标题】可以为 HttpClient 提供多个 HTTP 消息处理程序吗?【英文标题】:Can you have more than one HTTP Message Handler for HttpClient? 【发布时间】:2016-08-02 10:34:22 【问题描述】:我需要查询发送可以加密和/或压缩和/或 Base64 编码的响应的 Web API,我想将其实现为HttpMessageHandler
s 链,非常类似于@987654321 中所述@,虽然是用于 Web API。
HttpClient
的构造函数采用HttpMessageHandler
,所以这是一个开始。我是否必须自己想出一个链接多个处理程序的解决方案,或者是否有更好的选择?
【问题讨论】:
【参考方案1】:链接HttpMessageHandler
s 的最简单方法是从DelegatingHandler
继承,它在其构造函数中采用内部HttpMessageHandler
,并在其基础SendAsync
实现中调用它。
public class MyHandler1 : DelegatingHandler
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
// do something before the inner handler runs (modify the request?)
var response = await base.SendAsync(request, cancellationToken);
// do something after the inner handler runs (modify the repsonse?)
return response;
拥有多个这些,当你构造HttpClient
时,你可以按照你想要的任何顺序将它们链接在一起:
var client = new HttpClient(
new MyHandler1(
new MyHandler2(
new MyHandler3(...))));
【讨论】:
以上是关于可以为 HttpClient 提供多个 HTTP 消息处理程序吗?的主要内容,如果未能解决你的问题,请参考以下文章
jmeter http请求中的httpclient4和java有啥区别
基于httpclient与jsoup的抓取当当图书页面数据简单Demo
HttpClient和HttpURLConnection的区别