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.