记一次HTTPClient模拟登录获取Cookie的开发历程环境:? springboot : 2.7
? jdk: 1.8
? httpClient : 4.5.13
设计方案? 通过新建一个空的cookie库创建出一个Http客户端,然后通过此客户端调用登录接口模拟登录拿到cookie数据 , 登录成功 cookie会自动存储到我们之前新建的空cookie库中 , 将此cookie库保存下来,后续其他接口调用每次都通过这个登录成功的cookie库创建出新的http客户端来发起http访问 。
代码实现:/*** 每个cookie只能绑定一个客户端,提供这个方法用于给cookie生成http客户端** @param basicCookieStore: cookie* @Author: sanghaiquan* @Date: 2022/11/9 10:45* @return: org.apache.http.impl.client.CloseableHttpClient**/private static CloseableHttpClient getHttpsClient(BasicCookieStore basicCookieStore) throws KeyManagementException, NoSuchAlgorithmException {CloseableHttpClient httpClient = null;SSLContext sslContext = SSLContext.getInstance("TLS");X509TrustManager x509TrustManager = new X509TrustManager() {@Overridepublic void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}};sslContext.init(null, new TrustManager[]{x509TrustManager}, null);SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext,new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"},null,NoopHostnameVerifier.INSTANCE);httpClient = HttpClients.custom()// 设置跳过SSL认证.setSSLSocketFactory(sslConnectionSocketFactory)// 设置客户端默认的cookie.setDefaultCookieStore(basicCookieStore)// 每个route默认的最大连接数.setMaxConnPerRoute(100)// 总的连接池最大连接数.setMaxConnTotal(500).build();return httpClient;}
问题记录:? 获取到的cookiestore由于内部结构原因,无法被redis正常反序列化,如果需要将cookie持久化存储,那么就需要将cookiestore中的cookiesGet获取出来 , 并转换成list然后存储到reids中,因为cookiestore中cookies的数据类型默认是LIst<cookie接口>,泛型是接口导致无法使用redis反序列化,故需要进行转换操作 。
? 并且在编写代码过程中,list类型存储的cookes数据在使用GenericJasksonRedisSerializer在从redis中取出进行反序列化时仍旧会报错,无法转换,具体原因待分析,故将序列化改为GenericFastJsonRedisSerializer进行序列化,问题解决 。
存疑点:? 1.频繁使用cookie创建新的httpclient是否会影响性能?
? 2.有没有使用唯一的一个httpclient每次去新的cookiestore的办法 , 类似于Token机制一样,只需要创建一个默认的httpclient即可,全局通过,无需频繁创建销毁httpclient 。
【记一次HTTPClient模拟登录获取Cookie的开发历程】
推荐阅读
- 五 RK3568开发笔记:在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像
- 记一次多个Java Agent同时使用的类增强冲突问题及分析
- realme笔记本最新消息_realme笔记本即将发布
- JUC学习笔记——进程与线程
- 斗地主怎么玩(斗地主怎么记牌最轻松)
- 第4版 高性能MySQL 第一章 MySQL架构 读书笔记
- 无期迷途魂识印记怎么获得
- 手机zip文件密码怎么解(手机zip压缩文件忘记密码)
- DNF怎么让装备增幅(dnf一次性增幅器怎么用)
- JVM学习笔记——内存模型篇