HttpClient 源码解读

本文主要解析HttpClient 4.3版本的源码,相较于4.1版本,其对“链”的概念更加突出。介绍了HttpClient的执行步骤,包括建立HttpClient实例,设置属性,执行execute方法,深入到MainClientExec的execute方法。文章提供了执行HTTP请求的主要流程,帮助理解HttpClient的工作原理。
摘要由CSDN通过智能技术生成

前面写了两篇HttpClient和HtmlUnit和文章,然后就很久没有更新了,真的是有事,现在闲下来,把N久没动的博客也更新一下吧,因为上次的HttpClient方面讲的比较少嘛,这篇文章也正好补一下。


写博客之前也看了下网上其他人写的文章,也有很多解读HttpClient源码的,但是都是版本HttpClient4.1之前的,这里我先把我看到的一篇比较好的解读HttpClient源码的文章和大家一起分享一下:http://www.educity.cn/wenda/147389.html。


今天主要是讲解HttpClient4.3版本的源码,4.3改动还是有一点的,主要是对于“链”的概念更加浓重了。


一、HttpClient 执行步骤


先来看一下,HttpClient4.0大致的时序图。


(看的清楚么,我画的时候已经很注意字体大小以及截图的时候的清晰度了,如果实在看不清只能自己纯看文字了。)

你也可以参考下我上面分享的那篇文章里面的时序图,对比下HttpClient4.3版本做了哪些改变。


已请求一个正常的POST流为例,我们来看下HttpClient是如何执行的:


1、首先你需要建立一个HttpClient,设置这个HttpClient的一些基本属性,这其中包括HTTPS处理策略,连接超时时间,Cookie策略,连接池等等,这些都可以通过搜索HttpClient4.0+ 的教程学习。


2、执行HttpClient的execute方法,这个时候你会发现实际走向是 HttpClient -> CloseableHttpClient -> InternalHttpClient ,然后在doExecute()方法中进行了一些基本判断,初始化值之后,就进入了ClientExecChain(MainClientExec)的execute()方法。


3、然后我们可以简单看下MainClientExec的execute方法。

// @CaiBo
	public CloseableHttpResponse execute(final HttpRoute route, final HttpRequestWrapper request, final HttpClientContext context,
			final HttpExecutionAware execAware) throws IOException, HttpException {
		// 判断是否为空(Args这个工具类将经常出现)
		Args.notNull(route, "HTTP route");
		Args.notNull(request, "HTTP request");
		Args.notNull(context, "HTTP context");

		// 看到Auth相关的直接跳过,这和认证(HTTPS等)相关,我们暂时不理会,直接往下看
		AuthState targetAuthState = context.getTargetAuthState();
		if (targetAuthState == null) {
			targetAuthState = new AuthState();
			context.setAttribute(HttpClientContext.TARGET_AUTH_STATE, targetAuthState);
		}
		AuthState proxyAuthState = context.getProxyAuthState();
		if (proxyAuthState == null) {
			proxyAuthState = new AuthState();
			context.setAttribute(HttpClientContext.PROXY_AUTH_STATE, proxyAuthState);
		}
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 的简单源码解析,希望对你有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值