七大主流的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。

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

相关文章
|
XML 编解码 Java
Spring Boot 中的 RestTemplate和Retrofit 插件很好
Spring Boot 中的 RestTemplate和Retrofit 插件很好
707 1
|
10月前
|
Web App开发 网络协议 应用服务中间件
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
HTTP/2 是 HTTP/1.1 的重要升级,通过多路复用、头部压缩、服务器推送等特性显著提升性能与效率。本文详细解析了 HTTP/2 的优势、配置方法及实际应用,涵盖 Nginx/Apache/IIS 配置、curl 测试工具使用,并对比 HTTP/1.1 指出其优化点。同时提醒需注意 HTTPS 支持、客户端兼容性等问题,助你高效掌握并运用 HTTP/2 技术。
1030 5
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
768 3
|
缓存 负载均衡 应用服务中间件
nginx的配置文件详解
本文详细解释了nginx配置文件中的关键指令和区块,如http、server、location、upstream、events等,并通过一个示例配置文件展示了如何设置HTTP服务器、gzip压缩、反向代理、URL重写、错误页面和负载均衡等,强调了配置的灵活性和实际应用。
1052 4
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
1521 3
|
Java Apache Spring
Java发送Http请求(HttpClient)
Java发送Http请求(HttpClient)
13352 2
|
Oracle Java 关系型数据库
EMT4J——让 Java 应用升级更轻松
EMT4J 是什么?如何使用 EMT4J 工具进行 Java 应用升级?
EMT4J——让 Java 应用升级更轻松
|
JSON 前端开发 Java
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
1424 0
HTTP连接客户端,选 HttpClient 还是 OkHttp ?
|
JSON 负载均衡 Java
SpringCloud Feign 远程调用(史上最详细讲解)
SpringCloud Feign 远程调用(史上最详细讲解)
15314 0
SpringCloud Feign 远程调用(史上最详细讲解)