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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM