commons-httpclient 和 httpclient 之间有啥关系,都来自 apache

Posted

技术标签:

【中文标题】commons-httpclient 和 httpclient 之间有啥关系,都来自 apache【英文标题】:what the relationship between commons-httpclient and httpclient, both from apachecommons-httpclient 和 httpclient 之间有什么关系,都来自 apache 【发布时间】:2011-07-06 10:08:41 【问题描述】:

这两个库之间的任何关系或差异。

【问题讨论】:

【参考方案1】:

Commons HttpClient 是一个产生 HttpClient 3.1 的老项目。该项目被更大的Apache HttpComponents 项目所包含,该项目产生了HttpClient 4.x。

这相当令人困惑并且有点政治化,但是旧的 Commons HttpClient 库现在已被弃用。

【讨论】:

弃用 Commons HttpClient 3.x 没有任何政治意义。一个简单的事实是,没有人,只有没有人愿意维护它并致力于处理 3.x 核心类的可怕混乱。 @oleg:很公平 :) 从我在 4.x 开发过程的早期进入邮件列表时,它才看起来很政治。 毕业进入 TLP(***项目),这主要是由 ASF 决定解散雅加达项目所推动的,这确实是政治性的。 2.x / 3.x API 是死胡同的决定没有任何政治意义。对于曾经接触过 2.x 和 3.x 代码行中的核心类的人来说,这基本上是显而易见的。 我很惊讶地看到 httpclient3.x 和 httpclient4.x 的结果[source atlassian.com/blog/archives/http-client-performance-io].如果是真的,那么为什么 4.x 的性能比 3.x 慢。以及为什么他们没有努力提高绩效 如果有人有其他的基准测试链接,或者不同意这个请确认[atlassian.com/blog/archives/http-client-performance-io]【参考方案2】:

这两个库之间的任何...区别。

是的。它们非常不同。包名一开始就不同,4.x API 比3.x API 丰富得多。

首先,4.x HttpClient API 基于旨在支持 HTTP 客户端和服务器端的核心库。核心旨在同时支持阻塞 I/O 和事件驱动 I/O,并且有一个 AsyncHttpClient API 顶部支持后者。该框架在 cookie 管理、连接管理、客户端身份验证、代理路由、资源处理和流式传输等方面也有很多。

遗憾的是,这一切都意味着使用 HttpClient 3.x 构建的代码需要进行重大重写才能使用 HttpClient 4.x。我想这就是@skaffman 所暗示的混乱和政治的根源。

但对我来说,最重要的是,如果您正在开发新项目,您应该使用 HttpClient 4.x。

【讨论】:

我更喜欢 3.x API。我觉得 4.x API 令人困惑和巴洛克式的,并且需要大量的配置来做最简单的事情。 @skaffman。 HttpClient 被各种不同的应用程序使用,这些应用程序具有不同的(通常是冲突的)需求:网络爬虫、HTTP 加载工具、网络应用程序测试器、网络服务传输、HTTP 代理、网关等。创建一个适合所有这些应用程序领域的通用 API 并非易事,同时又简单又灵活。在 4.x API 开发过程中,灵活性、模块化和性能通常比简单性和与 3.x 代码行的兼容性更受青睐。 > "... 需要大量的配置来做最简单的事情。"我不认为这种说法是正确的。 @oleg:当然...我并不是在抱怨 4.x API 本身,只是因为我使用它的目的,3.1 更简单。 @KiranMN - “它似乎更敏捷” 很难客观地衡量性能。

以上是关于commons-httpclient 和 httpclient 之间有啥关系,都来自 apache的主要内容,如果未能解决你的问题,请参考以下文章

论httpclient上传带参数commons-httpclient和apache httpclient区别

commons-httpclient 和 httpclient 之间有啥关系,都来自 apache

gradle httpclient

HTTP请求客户端工具类

CloseableHttpAsyncClient实现Post方式HTTP异步调用接口

Http发送post(x-www-form-urlencoded)请求