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]