HttpClient使用不当,服务挂了,是时候系统学习一下了

本文介绍了HttpClient的重要性和使用场景,通过实例代码展示了如何处理GET和POST请求,包括超时配置和连接管理,强调了正确释放连接以避免内存溢出的重要性。还分享了HttpClient工具类的封装方法,帮助开发者更高效地使用HttpClient。
摘要由CSDN通过智能技术生成

背景

最近发生了两件事,觉得有必要系统的学习一下Apache的HttpClient了。

事件一:联调微信支付接口,用到HttpClient,花时间整理了一番。如果有一篇文章,读一读就可以掌握HttpClient 80%的内容,再有可以直接用的Demo,下次再遇到是不是就可以非常容易集成了?这便是这篇文章的目标之一。

事件二:上家公司同事发消息求助,说系统JVM溢出,找不到原因不了。查看了发来的日志文件,基本定位是HttpClient调用三方接口时内存溢出导致的。

无论出于哪种原因,HTTP调用的熟练使用都是必不可少的,今天就来一起系统学习一下,查漏补缺。

HttpClient

HTTP协议的重要性不言而喻,它是现在Internet中使用最多,最重要的协议了。虽然JDK中已经提供了HTTP协议的基本功能,但对于大部分应用来说,这套API还是不够丰富和灵活。

HttpClient是用来编程实现HTTP调用的一款框架,它是Apache Jakarta Common下的子项目,相比传统JDK自带的URLConnection,增加了易用性和灵活性。

HttpClient不仅使客户端发送Http请求变得更加容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。

目前主流的SpringCloud框架,服务与服务之间的调用也全部是基于HttpClient来实现的。因此,系统的学习一下HttpClient,还是非常有必要的。

HttpClient功能及特性

HttpClient主要提供了以下功能及特性实现:

  • 基于标准、纯净的java语言。实现了HTTP 1.0和HTTP 1.1;
  • 以可扩展的面向对象的结构实现了HTTP全部的方法(GET、 POST、PUT、DELETE、HEAD、OPTIONS、TRACE)等。
  • 支持HTTPS协议。
  • 通过HTTP代理建立透明的连接。
  • 利用CONNECT方法通过HTTP代理建立隧道的HTTPs连接。
  • Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。
  • 插件式的自定义认证方案。
  • 便携可靠的套接字工厂使它更容易地使用第三方解决方案。
  • 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
  • 自动处理Set-Cookie中的Cookie。
  • 插件式的自定义Cookie策略。
  • Request的输出流可以避免流中内容直接缓冲到Socket服务器。
  • Response的输入流可以有效的从Socket服务器直接读取相应内容。
  • 在HTTP 1.0和HTTP1.1中利用KeepAlive保持持久连接。
  • 直接获取服务器发送的response code和 headers。
  • 设置连接超时的能力。
  • 实验性的支持HTTP1.1 response caching。
  • 源代码基于Apache License 可免费获取。
  • 支持自动(跳转)转向;

关于以上特性,了解即可,到时再进行深入学习和实践。

HttpClient使用步骤

使用HttpClient来发送请求、接收响应通常有以下步骤:

  • 引入依赖:项目中通过Maven等形式引入HttpClient依赖类库。
  • 创建HttpClient对象。
  • 创建请求方法实例:GET请求创建HttpGet对象,POST请求创建HttpPost对象,并在对象构建时指定请求URL。
  • 设置请求参数:调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;HttpPost也可调用setEntity(HttpEntity entity)方法来设置请求参数。
  • 发送请求:调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
  • 获取响应结果:调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。
  • 释放连接:无论执行方法是否成功,都必须释放连接。

以上便是使用HttpClient的核心步骤:引入依赖、创建HttpClie

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值