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

相關文章
相關標籤/搜索