Apache HttpClient - Cookie 管理



Cookie 是儲存在客戶端計算機上的文字檔案,用於各種資訊跟蹤目的。

HttpClient 提供了對 Cookie 的支援,您可以建立和管理 Cookie。

建立 Cookie

請按照以下步驟使用 HttpClient 庫建立 Cookie。

步驟 1 - 建立 CookieStore 物件

CookieStore 介面表示 Cookie 物件的抽象儲存。您可以透過例項化BasicCookieStore 類(此介面的預設實現)來建立一個 Cookie 儲存。

//Creating the CookieStore object
CookieStore cookieStore = new BasicCookieStore();

步驟 2 - 建立 ClientCookie 物件

除了 Cookie 的功能外,ClientCookie 還可以獲取伺服器中的原始 Cookie。您可以透過例項化BasicClientCookie 類來建立一個客戶端 Cookie。在這個類的建構函式中,您需要傳遞您希望儲存在該特定 Cookie 中的鍵值對。

//Creating client cookie
BasicClientCookie clientCookie = new BasicClientCookie("name","Raju");

步驟 3 - 設定 Cookie 的值

對於客戶端 Cookie,您可以使用相應的方法設定/刪除路徑、值、版本、過期日期、域、註釋和屬性。

Calendar myCal = new GregorianCalendar(2018, 9, 26);
Date expiryDate = myCal.getTime();
clientcookie.setExpiryDate(expiryDate);
clientcookie.setPath("/");
clientcookie.setSecure(true);
clientcookie.setValue("25");
clientcookie.setVersion(5);

步驟 4 - 將 Cookie 新增到 Cookie 儲存

您可以使用BasicCookieStore 類的addCookie() 方法將 Cookie 新增到 Cookie 儲存。

將所需的 Cookie 新增到CookieStore

//Adding the created cookies to cookie store
cookiestore.addCookie(clientcookie);

示例

以下示例演示如何建立 Cookie 並將它們新增到 Cookie 儲存。在這裡,我們建立了一個 Cookie 儲存,透過設定域和路徑值建立了一組 Cookie,並將它們新增到 Cookie 儲存。

import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;

public class CookieHandlingExample {
   
   public static void main(String args[]) throws Exception{
      
      //Creating the CookieStore object
      CookieStore cookiestore = new BasicCookieStore();
 
      //Creating client cookies
      BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju");
      BasicClientCookie clientcookie2 = new BasicClientCookie("age","28");
      BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad");

      //Setting domains and paths to the created cookies
      clientcookie1.setDomain(".sample.com");
      clientcookie2.setDomain(".sample.com");
      clientcookie3.setDomain(".sample.com");

      clientcookie1.setPath("/");
      clientcookie2.setPath("/");
      clientcookie3.setPath("/");
 
      //Adding the created cookies to cookie store
      cookiestore.addCookie(clientcookie1);
      cookiestore.addCookie(clientcookie2);
      cookiestore.addCookie(clientcookie3);
   }
}

檢索 Cookie

您可以使用BasicCookieStore 類的getCookies() 方法獲取新增到 Cookie 儲存的 Cookie。此方法返回一個列表,其中包含 Cookie 儲存中的所有 Cookie。

您可以使用迭代器列印 Cookie 儲存的內容,如下所示:

//Retrieving the cookies
List list = cookieStore.getCookies();

//Creating an iterator to the obtained list
Iterator it = list.iterator();
while(it.hasNext()) {
   System.out.println(it.next());
}

示例

以下示例演示如何從 Cookie 儲存中檢索 Cookie。在這裡,我們將一堆 Cookie 新增到 Cookie 儲存中,然後將其檢索回來。

import org.apache.http.client.CookieStore;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;

public class CookieHandlingExample {
 
   public static void main(String args[]) throws Exception{
      
      //Creating the CookieStore object
      CookieStore cookiestore = new BasicCookieStore();
      
      //Creating client cookies
      BasicClientCookie clientcookie1 = new BasicClientCookie("name","Raju");
      BasicClientCookie clientcookie2 = new BasicClientCookie("age","28");
      BasicClientCookie clientcookie3 = new BasicClientCookie("place","Hyderabad");

      //Setting domains and paths to the created cookies
      clientcookie1.setDomain(".sample.com");
      clientcookie2.setDomain(".sample.com");
      clientcookie3.setDomain(".sample.com");

      clientcookie1.setPath("/");
      clientcookie2.setPath("/");
      clientcookie3.setPath("/");
 
      //Adding the created cookies to cookie store
      cookiestore.addCookie(clientcookie1);
      cookiestore.addCookie(clientcookie2);
      cookiestore.addCookie(clientcookie3);
   }
}

輸出

執行此程式後,將生成以下輸出:

[version: 0][name: age][value: 28][domain: .sample.com][path: /][expiry: null]
[version: 0][name: name][value: Raju][domain: my.example.com][path: /][expiry:
null]
[version: 0][name: place][value: Hyderabad][domain: .sample.com][path:
/][expiry: null]
廣告