HttpClient 4 发送自定义 cookie

1.简介

文章将介绍在Apache HttpClient 4 中cookie的使用。html

2.在HttpClient中配置管理cookie

2.1 HttpClient 4.3之后

在新的HttpClient 4.3中。咱们将充分利用开放的API来管理设置咱们的客户端连接
首先,咱们须要创造一个cookie store 并将咱们的cookie 放入里面: java

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();</p>
<pre><code>final HttpGet request = new HttpGet("http://www.github.com");

response = client.execute(request);
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
</code>

} 设置那个域名十分重要。不设置的话,客户端将不会发送cookie,至关于cookie绑定在.github.com上 git

2.2. HttpClient 4.3以前

在4.3以前的HttpClient 版本中,cookie是直接设置在HttpClient上的。 github

@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);</p>
<pre><code>HttpGet request = new HttpGet("http://www.github.com");

response = client.execute(request);
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
</code>

} 除了client 的建立,其余地方没有区别;cookie

设置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();</p>
<pre><code>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));
</code>

} ui

在header上设置cookie

在Header上设置简单的cookie值用于请求 code

@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更容易出错,在咱们没有设置域名的状况下,这样的作法就是错的。

结束

本文演示了如何使用Httpclient自定义cookie发送请求htm

相关文章
相关标签/搜索