Apache HttpClient总览

news2024/11/23 15:18:56

一、重大版本

Apache HttpClient 4.x 系列

    •    HttpClient 4.0(发布于2008年左右):这是一个重要的里程碑,标志着HttpClient从Jakarta Commons项目转移到Apache HttpComponents项目。4.0版进行了大量的重构,引入了新的连接管理模型(基于HttpCore),支持了HTTP/1.1的持久连接、连接池以及更灵活的配置选项。
    •    HttpClient 4.2(发布于2013年之前):此版本增加了对HTTP状态线支持、改进了多部分实体的处理、增强了请求参数编码,以及更强大的HTTP响应处理能力。它还引入了对国际域名(IDN)的支持,并改进了与SSL/TLS相关的功能。
    •    HttpClient 4.5(约2015年至2016年间):这个版本重点在于提升性能、增强安全性、简化API使用,并且开始为HTTP/2做准备。它包括对TLSv1.2的支持、改进的连接管理、更严格的SSL握手策略,以及对HTTP/2的初步实验性支持。

Apache HttpClient 5.x 系列

    •    HttpClient 5.0(2018年以后):这是一个重大的更新,引入了全新的HTTP/2实现,完全基于Java NIO,提供了原生的异步支持。此外,它还增强了对HTTP/1.1的性能和兼容性,改进了连接重用策略,支持了WebSocket,以及提供了更强大的请求和响应拦截器系统。
    •    后续版本:随着时间的推移,HttpClient 5.x系列通过后续的小版本更新,继续优化HTTP/2支持、修复漏洞、提升性能和稳定性,并引入更多现代Web特性支持,如HTTP/3的实验性支持、对新TLS版本的兼容性增强等。

二、代码模块

httpclient

httpcore

httpcore-nio

httpasyncclient

    1.    HttpCore:
    •    核心包:这是HttpClient库的基础,提供了HTTP协议的核心抽象和实现。它定义了HTTP请求、响应、头信息、实体内容、连接管理等基本组件。HttpCore分为两个模块:httpcore 用于NIO(非阻塞I/O)支持,而 httpcore-nio 专注于阻塞I/O模型。它是构建高性能HTTP客户端和服务端的基础。
    2.    HttpClient:
    •    高级API:基于HttpCore,HttpClient提供了更高层次的API,使得发送HTTP请求变得简单直接。它封装了复杂的HTTP协议细节,让你可以专注于业务逻辑。HttpClient支持HTTPS、认证、连接管理、重定向处理、请求和响应实体的处理等特性。
    3.    HttpAsyncClient:
    •    异步API:针对需要高性能和高并发的应用场景,HttpAsyncClient提供了异步请求处理能力。这意味着你可以在发送HTTP请求后立即返回,不阻塞当前线程,当响应到达时通过回调或Future/Promise模式处理结果。这非常适合那些需要处理大量并发请求的场景。
    4.    Connection Management:
    •    连接池管理:HttpClient支持通过ConnectionManager(如PoolingHttpClientConnectionManager)来复用连接,减少每次请求时建立和销毁TCP连接的开销。连接池管理包括连接的最大数量、超时设置、空闲连接的清理等,对于性能优化至关重要。
    5.    Request and Response Handling:
    •    请求与响应处理:HttpClient提供了丰富的API来构建HTTP请求(如GET、POST、PUT等)、设置请求头、处理请求体、解析响应等。它还支持多种实体处理器(EntityHandler)来处理不同类型的内容,如字符串、文件、流等。
    6.    Authentication and Authorization:
    •    认证与授权:支持多种认证机制,包括Basic、Digest、NTLM、Kerberos以及OAuth等,以满足不同安全需求。
    7.    Redirects and Retries:
    •    重定向与重试:自动处理HTTP重定向,并且可以配置重试策略来处理暂时性的网络问题或服务器错误。
    8.    SSL/TLS Support:
    •    SSL/TLS支持:HttpClient能够处理HTTPS请求,并允许自定义SSL上下文以支持信任管理、证书验证等安全配置。
    9.    Interceptors and Filters:
    •    拦截器与过滤器:允许插入自定义逻辑到请求/响应处理流程中,例如日志记录、请求/响应修改、计时、性能监控等。
    10.    Content Compression:
    •    内容压缩:支持请求和响应内容的自动压缩,减少网络传输的数据量,提升效率。

 三、设计哲学

CloseableHttpClient 上层使用入口,通过HttpClients工具生产

HttpClientConnectionManager 连接管理,最大连接数,单路由最大连接数

RequestConfig 请求配置,连接超时时间,读取超时时间

在Spring框架中,Spring为RestTemplate设计了兼容类,org.springframework.http.client.HttpComponentsClientHttpRequestFactory

用来直接接收HttpClient。这样就完美结合了RestTemplate和Apache HttpClient

import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

public class HttpClientPoolUtil {

    private static final int MAX_TOTAL_CONNECTIONS = 100;
    private static final int DEFAULT_MAX_PER_ROUTE = 20;
    private static final int CONNECT_TIMEOUT = 5000; // 连接超时时间,单位毫秒
    private static final int SOCKET_TIMEOUT = 10000; // 数据读取超时时间,单位毫秒

    private static volatile CloseableHttpClient httpClient;
    private static PoolingHttpClientConnectionManager connectionManager;

    private HttpClientPoolUtil() {
        // 防止外部实例化
    }

    private static synchronized void init() {
        if (httpClient != null) {
            return;
        }
        
        connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(MAX_TOTAL_CONNECTIONS);
        connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_PER_ROUTE);
        
        RequestConfig config = RequestConfig.custom()
                .setConnectTimeout(CONNECT_TIMEOUT)
                .setSocketTimeout(SOCKET_TIMEOUT)
                .build();

        httpClient = HttpClients.custom()
                .setConnectionManager(connectionManager)
                .setDefaultRequestConfig(config)
                .build();
    }

    public static String sendGetRequest(String url) throws Exception {
        if (httpClient == null) {
            init();
        }

        HttpGet httpGet = new HttpGet(url);
        try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                return EntityUtils.toString(entity);
            } else {
                throw new RuntimeException("Response entity is null");
            }
        }
    }

    // 可以根据需要添加其他HTTP方法如POST、PUT等
}

public class Main {
    public static void main(String[] args) {
        try {
            String response = HttpClientPoolUtil.sendGetRequest("http://example.com/api/data");
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Turbo Console Log自定义配置

写log太麻烦了?可以用下vscode中的Turbo Console Log的插件 因为vscode的其他快捷键可能会和这个插件产生冲突,所以可以从这里设置自定义不重复的快捷键。我这里用的shiftaltG用来生成log 我用的是显示第多少行和路径名 效果: 还有其他的…

从爱好到收入AI贴纸变现的五种途径,你尝试过几种?你会制作吗?

一、AI贴纸变现方式: 贴纸变现的方式主要包括以下几种: 1、广告变现 通过在小红书、公众号等可发图文的自媒体平台发布你制作的可爱贴纸,从而实现对可爱贴纸喜爱的人士观看并成为你的粉丝。粉丝达到一定数量即可接商业广告变现。 2、电商变…

js算法 计算每一列的平均值 求matrix数组对应列的平均值 组成一个新的数组 matrix数组有6行 如果某一行里的值是0则不纳入平均的分母里

let matrix [[18.95, 21.1, 0, 23, 0, 0, 0],[19, 25.3, 24.64, 0, 0, 0, 21.24],[22.18, 24.5, 20, 0, 26, 0, 0],[18.41, 19.05, 22.41, 27.67, 17, 0, 0],[14.86, 19.31, 0, 19.4, 18.71, 0, 25.04],[18.93, 19.53, 0, 0, 0, 0, 0] ];// 获取矩阵的列数 const numCols mat…

网络安全等级保护基本要求解读- 安全计算环境-应用系统和数据安全

概述 越来越多的企业用户已将核心业务系统转移到网络上,Web浏览器成为业 务系统的窗口,应用系统面临更多的安全威胁;并且由于各种原因使得其 存在较多的安全漏洞。 在此背景下,如何保障企业的应用安全,尤其是Web应用…

现场直击 | 飞凌嵌入式亮相2024上海国际嵌入式展

6月12日,2024上海国际嵌入式展(embedded world China 2024)在上海世博展览馆开幕。飞凌嵌入式亮相3号馆646展位,聚焦人工智能、智慧交通、工业互联网、智慧医疗、电力与储能等领域,旨在为全球客户带来一场技术与创新的…

MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

接上篇:链接: 现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果 第二种写法: -- 使用WITH子句创建CTE WITH…

《500 Lines or Less》(4)Contingent: A Fully Dynamic Build System(构建系统)

介绍 构建系统长期以来一直是计算机编程中的标准工具。 标准 make 构建系统由其作者获得 ACM 软件系统奖,于 1976 年首次开发。它不仅允许您声明一个输出文件依赖于一个(或多个)输入文件,而且可以递归地执行此操作。例如&#xf…

MySQL(5)

聚合函数 GROUP BY 的使用 需求:查询各个部门的平均工资,最高工资SELECT department_id,AVG(salary),SUM(salary)FROM employeesGROUP BY department_id;需求:查询各个job_id的平均工资SELECT job_id,AVG(salary)FROM employeesGROUP BY jo…

LabVIEW Actor架构特点与适用范围

LabVIEW的Actor架构提供了一种基于消息传递的并行任务管理方式,适合复杂系统的模块化设计。其特点包括高可扩展性、灵活的消息传递和并行处理能力。维护和修改要求较高,适合有一定经验的开发人员。对于中小型项目,可考虑选择更简单的状态机架…

使用winscp 通过中转机器(跳板机、堡垒机)密钥远程连接服务器,保姆级别教程

1.winscp下载地址 winscp下载 2.安装自己选择位置 3.连接服务器 到这里,基本就是没有壁垒机的就可直接连接,传递文件 4.配置中转服务器(壁垒机、跳板机) 选择高级选项 配置utf-8的编码格式 配置中转服务器(壁垒机、跳板机) 设置中专机的密码或者私钥 配置私钥

Vue3使用datav3报错问题解决

报错:Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 修改package.json 修改为 "module": "./es/index.mjs",

《一头扎进》系列之Python+Selenium框架设计篇22- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了。从本文开始宏哥将会一步一步介…

Django+Vue.js怎么实现搜索功能

一.前言 类似这样的搜索功能 二.前端代码 <div class"form-container"><div class"form-group"><label for"departure-city">出发城市</label><select v-model"departureCity" id"departure-city&q…

CentOS系统停服进入倒计时,用户该如何应对?

本月30日&#xff0c;CentOS 7将正式停服。 凭借开源免费、稳定、硬件兼容性等特性&#xff0c;CentOS深受中国乃至全世界厂商、开发者和用户的青睐&#xff0c;应用范围极为广泛。 停服停更&#xff0c;对于广大用户来说也是一项巨大的考验&#xff0c;这意味着用户将无法获得…

【web APIs】快速上手Day02

文章目录 Web APIs - 第2天事件事件监听案例一 :京东点击关闭顶部广告案例二&#xff1a;随机点名案例拓展知识-事件监听版本 双击事件 事件类型鼠标事件综合案例-轮播图完整版 焦点事件综合案例-小米搜索框案例 键盘事件文本事件 事件对象综合案例-按下回车发布评论 环境对象回…

VBA实战(Excel)(6):报错处理

前言 在运行VBA的过程中会有一些报错&#xff0c;例如类型不匹配等运行错误。On Error错误处理程序能直接有效的解决报错。但是当程序逻辑复杂时&#xff0c; 使用On Error会掩盖其他的未知错误&#xff0c;所以应尽可能想办法排除错误&#xff0c;或在已知功能范围内使用。 …

【有用】docker在windows下使用详情

在Windows下安装和使用Docker可以按照以下步骤进行&#xff1a; 安装 Docker Desktop 系统要求 • Windows 10 64-bit: Pro, Enterprise, or Education (1607 Anniversary Update, Build 14393 or later) • Windows 11 64-bit: Pro, Enterprise, or Education • Windows 10 …

python长方形周长面积 2024年3月青少年编程电子学会python编程等级考试二级真题解析

目录 python长方形周长面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python长方形周长面积 2024年3月 python编程等级考试级编程题 一、…

GIGE 协议摘录 —— 照相机的标准特征列表(五)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

数据中台:生产制造产业链的“智慧大脑”!

在当今激烈竞争的生产制造领域&#xff0c;数据中台正扮演着至关重要的角色&#xff0c;它就像是产业链的“智慧大脑”&#xff0c;引领着产业的发展方向&#xff01;数据中台在生产制造产业链、生态链中起到以下关键作用&#xff1a; 1. 数据整合与共享&#xff1a;将产业链各…