首页 > 其他分享 > 记一次HTTPClient模拟登录获取Cookie的开发历程

记一次HTTPClient模拟登录获取Cookie的开发历程

时间:2022-11-10 15:23:26浏览次数:34  
标签:null 登录 cookie Cookie HTTPClient 序列化 httpClient 客户端

记一次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() {
            @Override
            public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

            }
            @Override
            public 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。

标签:null,登录,cookie,Cookie,HTTPClient,序列化,httpClient,客户端
From: https://www.cnblogs.com/codeHai/p/16877143.html

相关文章

  • JDBC练习-登录案例
    需求:1.通过键盘录入用户名和密码2.判断用户是否登录成功select*fromuserwhereusername=""andpassword="";如果这个sql有查询结果则成功反之则失败步骤:1......
  • cookie的使用
    vue中使用js-cookie通过npmijs-cookie然后通过importCookiesfrom'js-cookie'//通过set,get来使用,和localStorage用法类似Cookie.set()Cookie.get()在登陆时获......
  • COOKIE
    6.3cookiecookie是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie.客户端浏览器会......
  • 别的电脑ssh win10 免密登录的方法
    首先要在win10里面把可选功能的opensshserver钩上,然后在win+r输入services.msc打开服务重启opensshserver服务然后使用管理员打开powershell,输入Not......
  • 20-jmeter-SetUp线程组批量登录并保存token文件
    前言我们在压测接口的时候,需批量获取多个用户登录后返回的token值,那么在setUp线程组可以先批量登录后把token保存到本地csv文件,后面的接口引用这个csv文件的数据参数化。......
  • 周材系统115服务器莫名登录不上,迁移到150记录
    服务名  端口位置nacos  8848 /opt/nacos redis  6379 /opt/redis-5.0.5 zookeeper  2181 /opt/zooke......
  • 路由器交换机配置域账号登录
    服务器配置1.添加网络策略服务(NAPS)      2.新建用户组   3.配置NAPS                             ......
  • day28 BOM浏览器对象 & 定时事件与Cookie & (视频卷子讲解)
    3.10BOM浏览器对象模型3.10.1window对象所有浏览器都支持window对象,它表示浏览器窗口;|属性|history 网页历史记录 返回History只读对象location 网页路径 ......
  • 如何登录锐捷设备(路由篇
    大家好,我是小杜,今天又是元气满满的一天,啃完手中的“精神食粮”,趁着还有些时间先温习下之前记录的笔记。一目十行看完之前的笔记,那就继续今天既定的内容,还是一样的了解......
  • Cookie
      发送:  获取: ......