1.概述

本教程将专注于如何发送一个自定义Cookie使用Apache HttpClient 4

如果你想深入挖掘并学习与httpclient - 头部可以做的其他很酷的事情主要的httpcl.的流动教程

2.在httpclient上配置cookie管理

2.1。httpclient 4.3之后

在较新的HttpClient 4.3中,我们将利用责任的Fluent Builder API与构造和配置客户端负责。

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

BasicCookiestore Cookiestore = New BasicCookiestore();BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");cookie.setDomain(“.github.com”);cookie.setPath(“/”);cookieStore.addCookie(饼干);

然后,我们可以使用HttpClient上的此cookie商店使用setdefaultcookiestore()方法并发送请求:

@test公共void whensettingcookiesonthehttpclient_thencookiesentcorrectly()抛出client procolexception,ioException {basiccookiestore cookiestore = new basiccookiestore();BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");cookie.setDomain(“.github.com”);cookie.setPath(“/”);cookieStore.addCookie(饼干);httpclient client = httpclientbuilder.create()。setdefaultcookiestore(cookiestore).build();最终的httpget请求= new httpget(“http://www.github.com”);响应= client.execute(请求);为了(response.getStatusLine () .getStatusCode(),等于(200);}

一个非常重要的元素是领域设置在cookie上 -如果没有设置正确的域,客户端将不会发送cookie!!

此外,根据您使用的确切版本,您也可能需要设置:

cookie.setattribute(clientcookie.domain_attr,“true”);

2.2。在4.3之前的httpclient

使用HttpClient的旧版本(4.3之前) - Cookie Store直接设置httpclient.

@Test public void givenusingdeprecatedapi_whensettingcookiesonthehttpclient_thenccorrect () throws ClientProtocolException, IOException {BasicCookieStore cookieStore = new BasicCookieStore();BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");cookie.setDomain(“.github.com”);cookie.setPath(“/”);cookieStore.addCookie(饼干);DefaultHttpClient client = new DefaultHttpClient();client.setCookieStore (cookieStore);HttpGet request = new HttpGet("http://www.github.com");响应= client.execute(请求);为了(response.getStatusLine () .getStatusCode(),等于(200); }

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

3.设置请求的Cookie

如果在整个httpclient上设置cookie不是一个选项,我们可以使用cookie配置请求HttpContext类:

@test public void whensettingcookiesontherequest_thencookiesentcorrectly()抛出client procoloctexception,ioException {basiccookiestore cookiestore = new basiccookiestore();BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234");cookie.setDomain(“.github.com”);cookie.setPath(“/”);cookieStore.addCookie(饼干);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.在低级请求上设置Cookie

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

@test public void whensettingcookiesonarequest_thencorrect()抛出client procolocolexception,ioException {instance = httpclientbuilder.create()。build();HttpGet request = new HttpGet("http://www.github.com");Request.setheader(“cookie”,“jsessionid = 1234”);response = instance.execute(请求);为了(response.getStatusLine () .getStatusCode(),等于(200);}

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

结论

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

请注意,这与让Httpclient与服务器设置的cookie的相同。相反,它在低电平下手动控制客户端。

可以找到所有这些示例和代码片段的实现我的github项目

通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
本文评论关闭!