首页 > 技术文章 > Http中cookie的使用以及用CookieManager管理cookie

jylee 2018-08-04 11:02 原文

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

的。

  第一种方式:

    通过获取头信息的方式获取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.

 

推荐阅读