前段時間項目需要做個接口,接口需要先登錄才能進行下一步操作,這里就需要把登錄的信息攜帶下去,進行下一步操作。網上查了很多資料,有很多種方法。下面就介紹較常用
的。
第一種方式:
通過獲取頭信息的方式獲取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.