无法创建和设置cookie来处理JSESSSIONID

时间:2016-04-05 09:39:35

标签: java apache-httpclient-4.x apache-commons-httpclient

我们有一个基于Java的应用程序,可以从网站下载文件

必须登录才能访问网站内容(并下载)

所有这些都是使用Apache HttpClient 4.3.3

作为Java应用程序的一部分完成的

不幸的是,代码实现了登录,并在Web服务器上创建了不需要的会话(~10000 +)

网站登录后会提供JSESSSIONID作为Cookie的一部分。

我想到的是从cookie获取此JSESSIONID并创建cookie并将其设置为下一次调用的一部分。

以下是我做过的事情

  • 首次执行url后,我从cookie中读取JSESSIONID并存储在文本文件中
  • 在第二次运行期间,我会读取文本文件并获取JSESSIONID的值并创建一个cookie并设置它
  • 调用执行ClosableHTTPClient我将上下文与cookie一起传递

以下是我的代码段

CloseableHttpClient httpClient = null;
httpClient = HttpClientBuilder.create().useSystemProperties().build();
HttpClientContext  localContext = HttpClientContext.create();
BasicCookieStore cookieStore = new BasicCookieStore();
cookie.setDomain("sso.comp.com");
cookie.setPath("/");            
cookie.setAttribute("JSESSIONID", "dfafdffddasfad32423423_!ad");
cookieStore.addCookie(cookie);
localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
localContext.setCookieStore(cookieStore);
CloseableHttpResponse response = null;
response = httpClient.execute(get,localContext);

这总是导致HTTP 401 Unauthorized

请注意,每次从头开始下载我的应用程序,但是在几秒钟/分钟的空间内

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您正在以错误的方式创建Cookie。方法setAttribute用于设置cookie attributes

CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "dfafdffddasfad32423423_!ad");
cookie.setDomain("sso.comp.com");
cookie.setPath("/");
cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");
cookieStore.addCookie(cookie);

要验证cookie是否以写入格式发送,您可以启用http client wire traces或嗅探HTTP流量......