Apache Httpclient 简明教程

Apache HttpClient - Cookies Management

Cookie 是存储在客户端计算机上的文本文件,它们被用于各种信息跟踪目的。

HttpClient 为 cookie 提供支持,您可以创建和管理 cookie。

按照下面给出的步骤使用 HttpClient 库创建 cookie。

Step 1 - Create Cookiestore object

CookieStore 接口表示 Cookie 对象的抽象存储。您可以通过实例化 BasicCookieStore 类来创建 cookie 存储,该类是此接口的默认实现。

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

Step 2 - Create ClientCookie object

除了 cookie 的功能之外,ClientCookie 还可以获取服务器中的原始 cookie。您可以通过实例化 BasicClientCookie 类来创建客户端 cookie。对于此类的构造函数,您需要传递您希望存储在特定 cookie 中的键值对。

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

对于客户端 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);

您可以使用 BasicCookieStore 类的 addCookie() 方法向 cookie 存储中添加 cookie。

将必需的 cookie 添加到 Cookiestore 中。

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

Example

以下示例演示如何创建 cookie 并将其添加到 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);
   }
}

您可以使用 asicCookieStore 类的 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());
}

Example

以下示例演示如何从 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);
   }
}

Output

在执行时,此程序生成以下输出:

[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]