HttpClient 4 发送自定义的Cookie

教程分享 > Java教程 (2634) 2024-04-19 10:12:32

1.概述

本教程将重点介绍如何使用Apache HttpClient 4发送自定义Cookie

 

2.在HttpClient上配置Cookie管理

2.1。4.3之后的HttpClient

在较新的HttpClient 4.3中,我们将利用负责构建和配置客户端的流利构建器API。

首先,我们需要创建一个Cookie存储并在商店中设置我们的示例Cookie:

BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
cookie.setDomain(".github.com");
cookie.setPath("/");
cookieStore.addCookie(cookie);

然后,我们可以在HttpClient上设置这个cookie存储并发送请求:
 

@Test
public void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() 
  throws ClientProtocolException, IOException {
    BasicCookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
    cookie.setDomain(".github.com");
    cookie.setPath("/");
    cookieStore.addCookie(cookie);
    HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build();
 
    final HttpGet request = new HttpGet("http://www.github.com");
 
    response = client.execute(request);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

一个非常重要的元素是被设置上的Cookie - 没有设置正确的域,客户端将不会发送该cookie

2.2。4.3之前的HttpClient

使用旧版本的HttpClient(4.3之前) - cookie存储直接在HttpClient上设置:

@Test
public void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect() 
  throws ClientProtocolException, IOException {
    BasicCookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
    cookie.setDomain(".github.com");
    cookie.setPath("/");
    cookieStore.addCookie(cookie);
    DefaultHttpClient client = new DefaultHttpClient();
    client.setCookieStore(cookieStore);
 
    HttpGet request = new HttpGet("http://www.github.com");
 
    response = client.execute(request);
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

除了客户端的构建方式之外,与前面的示例没有其他区别。

3.在请求中设置Cookie

如果在整个HttpClient上设置cookie不是一个选项,我们可以单独配置cookie的请求:

@Test
public void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly() 
  throws ClientProtocolException, IOException {
    BasicCookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");
    cookie.setDomain(".github.com");
    cookie.setPath("/");
    cookieStore.addCookie(cookie);
    instance = HttpClientBuilder.create().build();
 
    HttpGet request = new HttpGet("http://www.github.com");
 
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
    // localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); // before 4.3
    response = instance.execute(request, localContext);
 
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

4.在低层请求Header中设置Cookie

在HTTP请求中设置Cookie的低级替代方案将会将其设置为原始标题:

@Test
public void whenSettingCookiesOnARequest_thenCorrect() 
  throws ClientProtocolException, IOException {
    instance = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet("http://www.github.com");
    request.setHeader("Cookie", "JSESSIONID=1234");
 
    response = instance.execute(request);
 
    assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
}

与使用内置cookie支持相比,这当然更容易出错 - 例如,注意我们在这种情况下不再设置域 - 这是不正确的。

【提示】:上面多个cookie则是  request.setHeader("Cookie", "JSESSIONID=1234;b=c;e=f");
中间使用英文分号隔开

5.总结

本文说明了如何使用HttpClient发送自定义的,用户控制的Cookie

请注意,这与让HttpClient处理由服务器设置的cookie不同 - 但是它却是在低级别手动控制客户端。

https://www.leftso.com/article/398.html

相关文章
1.概述本教程将重点介绍如何使用Apache HttpClient 4发送自定义Cookie
在本教程中 - 我们将使用HttpClient 4进行POST - 首先使用授权,然后使用流畅的HttpClient API。最后 - 我们将讨论如何使用HttpClient上传文件。
HttpClient Basic Authentication基本认证,本教程将说明如何在Apache HttpClient 4上配置基本身份验证。
Apache HttpClient 4.x 使用详解
HttpClient 4 按照POST重定向请求,本快速教程将展示如何配置Apache HttpClient 4以自动遵循POST请求的重定向。
HttpClient的RestTemplate - Java配置示例
本文将展示如何使用“接受所有”SSL支持来配置Apache HttpClient 4。目标很简单 - 使用没有有效证书的HTTPS URL。
Apache httpclient4.5 GET/POST/PUT/OPTION/DELETE工具类
HttpClient 4 分段上传文件,在本教程中,我们将演示如何使用HttpClient 4执行分段上传操作。
在本文中,我们将演示如何使用 HttpClient 解除URL的绑定。一个简单的例子就是当原始URL被缩短一次 - 通过诸如bit.ly的服务。一个更复杂的例子是,URL被多次缩短,被不同的服务...
java编程中采用Apache common.httpclient方式模拟POST请求
java WEB中Cookie的操作和使用,java,cookie,web
问题描述java设置cookie报错:java.lang.IllegalArgumentException: Control character in cookie value or attri...
Jquery cookie插件实现点击获取验证码后60秒内禁止重新获取,可直接拿走用,jquery,验证码获取
Java编程中发邮件也是常用的。但是原生的jdk自带的发送邮件用起来还是比较麻烦的。spring框架在Java语言中完全是神一样的存在,通过spring框架的邮件工具来发送邮件就非常方便了,本文...