七大主流的HttpClient程序比较

简介: 七大主流的HttpClient程序比较

HttpClient

 HttpClient,是一款强大的支持HTTP协议的客户端编程工具包。主要功能在于提供一种有效、最新且功能丰富的方式来执行HTTP请求和响应。HttpClient与浏览器有着本质的区别,它并不会缓存内容,也不会处理嵌入在HTML页面中的代码或是错误输入,更不会对不符合HTTP标准的行为进行处理。

 此外,HttpClient还支持多种HTTP协议的方法,包括但不限于GET、POST、PUT以及HEAD等。同时,它还具备对HTTPS和代理服务器的支持。这使得HttpClient成为了目前Internet上使用最为广泛且重要的协议之一。

优点 缺点
HttpURLConnection jdk自带、原始、简单 无连接池、性能与效率相对较低、高级功能不方便使用,一般来说不建议使用。
java.net.http.HttpClient jdk11正式启用自带HttpClient,代替之前比较旧的HttpURLConnection Oracle收购后大多数企业使用的都还是jdk8,使用的可能性比较小
HttpClient 1.支持连接池、多线程
2.从官方demo可以看出httpClient只创建一次,被多个线程复用
3.httpClient4.3后超时配置到request级
1.由于社区活跃度的问题,Android已经去掉了HttpClient该用了okHttp
2.使用起来需要自己封装
3.需要手动关闭httpclient.close()
okHttp 1.性能方面与httpclient类似
2.不需要手动关闭
3.支持http2
4.Android4.4开始换成okHttp
1.使用时需要自己封装
2.new OkHttpClient()每次使用都需要new出来(从晚上看到说作者可能是考虑可以忽略此开销)
3.超时配置在client级,没到每个request,这个可能与第2点同原因
4.好像底层实现了多线程的支持,没深入研究
Retrofit Retrofit是Square出的基于OKHttp封装的一套RESTful网络请求框架
1.restfull风格
2.基于接口编程
3.分装度高,基于注解
4.无须手动关闭
1.与okHttp类似,new Retorfit.Builder()每次使用都要new出来(可以考虑自己实现单例,网上也有些demo)
RestTemplate RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率 1.RestTemplate只有初始化配置,没有连接池
2.RestTemplate默认的http是HttpURLConnection
openFeign 1.可插拔的注解支持,包括Feign注解和JAX-RS注解
2.支持可插拔的HTTP编码器和解码器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)
3.支持HTTP请求和响应的压缩
4.支持多种客户端:JDK URLConnection、apache httpclient、okhttp、ribbon
默认的http是HttpURLConnection

1、HttpURLConnection

HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。

2、java.net.http.HttpClient

jdk11正式启用自带HttpClient,代替之前比较旧的HttpURLConnection。其实从java9的jdk.incubator.httpclient模块迁移到java.net.http模块,包名由jdk.incubator.http改为java.net.http。

3、Apache HttpClient

在Android中,AndroidSDK中集成了Apache的HttpClient模块,HttpClient就是一个增强版的HttpURLConnection,它只是关注于如何发送请求、接收响应,以及管理HTTP连接。如果做好封装或者使用android-async-http,Afinal,Xutils也能挺简单的完成http请求,但是Android6.0谷歌因为和Apache更新难以同步等原因吧已经放弃了HttpClient,改于了okHttp。

//httpclient官网示例 ClientMultiThreadedExecution.java
  PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(100);
        CloseableHttpClient httpclient = HttpClients.custom()
                .setConnectionManager(cm)
                .build();
       .........
        } finally {
            httpclient.close();
        }
//超时配置到Request级
     RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
          .setSocketTimeout(5000)
          .setConnectTimeout(5000)
          .setConnectionRequestTimeout(5000)
          .setProxy(new HttpHost("myotherproxy", 8080))
          .build();

4、okHttp

OkHttp 是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库。OKHttp 类似于 HttpUrlConnection, 是基于传输层实现应用层协议的网络框架。 而不止是一个 Http 请求应用的库。

okHttp的优势:

  • 链接复用
  • Response 缓存和 Cookie
  • 默认 GZIP
  • 请求失败自动重连
  • DNS 扩展
  • Http2/SPDY/WebSocket 协议支持
  • 默认情况下,OKHttp会自动处理常见的网络问题:像二次连接、SSL的握手问题。
  • 从Android4.4开始HttpURLConnection的底层实现采用的是okHttp.

5、Retrofit

Retrofit 是 Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架,,RESTful 可以说是目前流行的一套 api 设计的风格,并不是标准。Retrofit 的封装可以说是很强大,里面涉及到一堆的设计模式,你可以通过注解直接配置请求,你可以使用不同的 http 客户端,虽然默认是用 OKhttp ,可以使用不同 Json Converter 来序列化数据,同时提供对 RxJava 的支持,使用 Retrofit + OkHttp + RxJava + Dagger2 可以说是目前比较 的一套框架,但是需要有比较高的门槛。

Retrofit retrofit =
        new Retrofit.Builder()
            .baseUrl(API_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

6、RestTemplate

RestTemplate是 Spring 提供的用于访问Rest服务的客户端, RestTemplate 提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

7、OpenFeign

  • 可插拔的注解支持,包括Feign注解和JAX-RS注解。
  • 支持可插拔的HTTP编码器和解码器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)。
  • 支持Hystrix和它的Fallback。
  • 支持Ribbon的负载均衡。
  • 支持HTTP请求和响应的压缩。
  • 灵活的配置:基于 name 粒度进行配置
  • 支持多种客户端:JDK URLConnection、apache httpclient、okhttp,ribbon)
  • 支持日志
  • 支持错误重试
  • url支持占位符
  • 可以不依赖注册中心独立运行

总结

  • 在你还在纠结选择apache httpclient时,Android已经不用它了,改用okhttp了
  • 当你还在纠结选择apache httpclient还是okhttp时,Square已经出了Retrofit,网友已经在说既然你都用了okhttp为何不直接使用Retrofit

总的来说技术变化更新都比较快,得跟上技术的发展。一般来说没有使用springcloud话可以选择Retrofit,如果使用了springcloud可以使用OpenFeign+okHttp。

小舟从此逝,江海寄余生.    --苏轼《临江仙》

相关文章
|
2月前
|
前端开发 JavaScript 中间件
Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)
Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)
Nest 框架:解锁企业级 Web 应用开发的秘密武器(下)
|
2月前
|
JavaScript 中间件 测试技术
Nest 框架:解锁企业级 Web 应用开发的秘密武器(上)
Nest 框架:解锁企业级 Web 应用开发的秘密武器(上)
Nest 框架:解锁企业级 Web 应用开发的秘密武器(上)
|
20天前
|
供应链 Java 开发者
Spring 框架:Java 界的‘万能钥匙’,你的企业应用开发新宠!
【6月更文挑战第25天】# Spring框架:Java开发的基石!它提供一站式解决方案,涵盖依赖注入、AOP、事务管理等,简化复杂应用开发。通过注解如`@Service`、`@Autowired`实现代码解耦,`@Transactional`自动化事务处理,加上AOP实现全局日志记录,让维护变得简单。Spring,企业级开发的首选!
|
15天前
|
监控 API 调度
开放源代码平台Flynn的架构与实现原理
【6月更文挑战第30天】应用程序的生命周期涉及从开发到运行的复杂过程,包括源代码、构建、部署和运行阶段。
|
19天前
|
存储 缓存 Linux
【实战指南】嵌入式RPC框架设计实践:六大核心类构建高效RPC框架
在先前的文章基础上,本文讨论如何通过分层封装提升一个针对嵌入式Linux的RPC框架的易用性。设计包括自动服务注册、高性能通信、泛型序列化和简洁API。框架分为6个关键类:BindingHub、SharedRingBuffer、Parcel、Binder、IBinder和BindInterface。BindingHub负责服务注册,SharedRingBuffer实现高效数据传输,Parcel处理序列化,而Binder和IBinder分别用于服务端和客户端交互。BindInterface提供简单的初始化接口,简化应用集成。测试案例展示了客户端和服务端的交互,验证了RPC功能的有效性。
277 0
|
2月前
|
缓存 前端开发 JavaScript
探索现代Web应用的性能优化策略移动应用开发的未来之路:跨平台与原生之争
【4月更文挑战第30天】随着互联网技术的迅猛发展,Web应用已成为信息交流和商业活动的重要平台。用户对Web应用的响应速度和稳定性有着极高的期望,这促使开发者不断寻求提升应用性能的有效途径。本文将深入探讨针对现代Web应用进行性能优化的关键策略,包括前端优化、后端优化以及数据库层面的调优技巧,旨在为开发者提供一套全面的优化工具箱,帮助他们构建更快速、更高效的Web应用。
|
2月前
|
缓存 Java API
Java API设计实战指南:打造稳健、用户友好的API
本文将深入探讨在Java中设计有效API的原则,并着重介绍RESTful设计原则、版本控制策略以及文档实践。
357 38
|
缓存 JSON 前端开发
腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理
腾讯开源的 hel 提供了加载远程模块的能力,谈谈它的实现原理
160 0
|
机器学习/深度学习 自然语言处理 Java
LinkedIn 开源 Java 机器学习函数库Dagli,提供开发高效能且生产就绪的模型
LinkedIn 开源 Java 机器学习函数库Dagli,提供开发高效能且生产就绪的模型
LinkedIn 开源 Java 机器学习函数库Dagli,提供开发高效能且生产就绪的模型
|
网络协议 Dubbo Java
开源项目推荐:主流RPC开源框架及知识科普
开源项目推荐:主流RPC开源框架及知识科普
876 0
开源项目推荐:主流RPC开源框架及知识科普