HttpClient学习(二)—— MinimalHttpClient源码解析

依赖关系

在这里插入图片描述

方法

在这里插入图片描述

class MinimalHttpClient extends CloseableHttpClient {
    
    //连接管理器
    private final HttpClientConnectionManager connManager;
    //执行器
    private final MinimalClientExec requestExecutor;
    //参数
    private final HttpParams params;
}

doExecute方法



 @Override
    protected CloseableHttpResponse doExecute(
            final HttpHost target,
            final HttpRequest request,
            final HttpContext context) throws IOException, ClientProtocolException {
        Args.notNull(target, "Target host");
        Args.notNull(request, "HTTP request");
        //Interface to be implemented by any object 
        //that wishes to be notified of blocking I/O operations 
        //that could be cancelled.
        //blocking I/O .....
        HttpExecutionAware execAware = null;
        if (request instanceof HttpExecutionAware) {
            execAware = (HttpExecutionAware) request;
        }
        try {
            //HttpRequest的包装类
            final HttpRequestWrapper wrapper = HttpRequestWrapper.wrap(request);
            final HttpClientContext localcontext = HttpClientContext.adapt(
                context != null ? context : new BasicHttpContext());
            //指明服务器的地址
            final HttpRoute route = new HttpRoute(target);
            //请求相关的基础配置
            RequestConfig config = null;
            if (request instanceof Configurable) {
                config = ((Configurable) request).getConfig();
            }
            if (config != null) {
                localcontext.setRequestConfig(config);
            }
            return this.requestExecutor.execute(route, wrapper, localcontext, execAware);
        } catch (final HttpException httpException) {
            throw new ClientProtocolException(httpException);
        }
    }

最后请求会交给MinimalClientExec 对象处理。

MinimalClientExec



基础回顾

Blocking I/O

JAVA I/O分为BIO(Blocking IO)、NIO(Non-blocking IO)和AIO(Asynchronous IO)。这里要讲到的就是Blocking I/O。

参考文档

HttpClient源码解析系列:第二篇:极简版实现
HttpClient官网 Quick Start

参考视频

一头扎进HttpClient

转载于:https://www.cnblogs.com/fonxian/p/10855974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache HttpClient 是一个开源的、高性能的、易于使用的 HTTP 客户端库,广泛应用于 Java 应用程序中。下面简单介绍一下 HttpClient源码解析: 1. HttpClient 的主要类 HttpClient 的核心类是 CloseableHttpClientHttpClientBuilder。HttpClientBuilder 负责创建 CloseableHttpClient 实例,而 CloseableHttpClient 则封装了所有的 HTTP 请求和响应处理逻辑。 2. HttpClient 的请求发送流程 HttpClient 的请求发送流程包括以下几个步骤: - 创建 HttpClient 实例和 HttpUriRequest 实例; - 设置请求头和请求体; - 执行请求,并获取 HttpResponse 实例; - 解析响应,并将响应内容转换为所需的数据类型。 3. HttpClient 的连接管理 HttpClient 连接管理的核心是连接池,通过连接池可以提高 HTTP 请求的性能和效率。HttpClient 提供了 ConnectionReuseStrategy 接口和 ConnectionKeepAliveStrategy 接口,用于连接复用和连接保持的策略。 4. HttpClient 的认证和授权 HttpClient 提供了多种认证和授权方式,包括基本认证、摘要认证、NTLM 认证、OAuth 2.0、Bearer Token 等。 5. HttpClient 的异常处理 HttpClient 的异常处理包括两个方面:网络异常和 HTTP 异常。网络异常包括网络超时、连接中断等,HTTP 异常包括 4xx 和 5xx 状态码等。HttpClient 提供了相应的异常类和异常处理机制,方便开发者进行异常处理。 以上是 HttpClient 的简单源码解析,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值