zoukankan      html  css  js  c++  java
  • Http中cookie的使用以及用CookieManager管理cookie

    前段时间项目需要做个接口,接口需要先登录才能进行下一步操作,这里就需要把登录的信息携带下去,进行下一步操作。网上查了很多资料,有很多种方法。下面就介绍较常用

    的。

      第一种方式:

        通过获取头信息的方式获取cookie,HttpURLConnection的getHeaderFields()方法:

    1  HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    2  ...
    3   // 这里定义为Map<String,List<String>>类型,是因为getHeaderFields()方法获取的就是这种类型,可以通过postman软件查看返回的cookie类型。
    4  Map<String,List<String>> cookies = httpURLConnection .getHeaderFields();
    5  
    6  List<String> setCookies = cookies.get("Set-Cookie");
    7   ...

        当需要将cookie传递下去时:

    1 // 当需要使用cookie是将其传递出去(传递的是你需要的信息)
    2  String cookie = "JSESSIONID=xxx"  //  看个人需要获取cookie(cookie中包含的信息可能很多)
    3 
    4 // 这里是用HttpURLConnection 的setRequestProperty()方法将cookie放到请求的header中
    5 
    6  httpURLConnection.setRequestProperty("Cookie", cookie);

      第二种方法:

        使用CookieManager来获取管理cookie。

     1 // 使用CookieManager来管理cookie。
     2 
     3 public class CookieTest {
     4 
     5   // 登录的操作,传入用户名和密码
     6   public static List<HttpCookie> login(String j_username, String j_password){
     7     // 创建一个 CookieManager对象
     8     CookieManager manager = new CookieManager();
     9     // 接受所有的Cookie
    10     manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
    11     // 保存这个定制的CookieManager
    12     CookieHandler.setDefault(manager);
    13 
    14     CookieStore cookieJar = manager.getCookieStore();
    15     // 用List获取cookie,因为cookie中可能包含多个信息
    16     List<HttpCookie> cookies = cookieJar.getCookies();
    17    /**
    18      *其他的操作省略
    19      */
    20     // 这里我们就获取到了cookie,将其返回。
    21     return cookies;
    22   }
    23   // 测试携带cookie的方法
    24   public void testcookie(List<HttpCookie> cookies) {
    25     // 可以设置你要访问的路径
    26     URL url = new URL("https:......");
    27     /**
    28      * 省略其他操作
    29      */
    30     // 创建默认的CookieManager
    31       CookieManager manager = new CookieManager();
    32       // 保存这个定制的CookieManager
    33       CookieHandler.setDefault(manager);
    34 
    35       CookieStore cookieJar = manager.getCookieStore();
    36       for (HttpCookie cookie : cookies) {
    37           cookieJar.add(url.toURI(), cookie);
    38       }
    39   }
    40 
    41   public static void main(String[] args){
    42     CookieTest  test = new CookieTest ();
    43     // 当我们要携带cookie进行下一步操作的时候,先接受登录操作返回的cookies
    44     List<HttpCookie> cookies = test.login("admin", "admin");
    45     // 进行下一步操作时将cookies携带着
    46     test.testcookie(cookies);
    47     ...
    48   }
    49 }

    我目前只尝试过这两种方式,如以后在发现会加上来的。

    文中的内容参考了官方文档:https://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/accessingCookies.html

    若有问题可以和我交流,714759889@qq.com.

  • 相关阅读:
    Nginx log日志参数详解
    sea.js模块加载工具
    sea.js模块加载工具
    Airbnb React/JSX 编码规范
    4.2 react patterns(转)
    4.1 react 代码规范
    3.5 compose redux sages
    3.3 理解 Redux 中间件(转)
    3.4 redux 异步
    3.1 开始使用 redux
  • 原文地址:https://www.cnblogs.com/jylee/p/9417911.html
Copyright © 2011-2022 走看看