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

  本篇文章为你整理了记一次HTTPClient模拟登录获取Cookie的开发历程()的详细内容,包含有 记一次HTTPClient模拟登录获取Cookie的开发历程,希望能帮助你了解 记一次HTTPClient模拟登录获取Cookie的开发历程。

  ​ 通过新建一个空的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();

  
问题记录:

  ​ 获取到的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的开发历程()的详细内容,想要了解更多 记一次HTTPClient模拟登录获取Cookie的开发历程的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: