我们有一个基于Java的应用程序,可以从网站下载文件
必须登录才能访问网站内容(并下载)
所有这些都是使用Apache HttpClient 4.3.3
作为Java应用程序的一部分完成的不幸的是,代码实现了登录,并在Web服务器上创建了不需要的会话(~10000 +)
网站登录后会提供JSESSSIONID作为Cookie的一部分。
我想到的是从cookie获取此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
请注意,每次从头开始下载我的应用程序,但是在几秒钟/分钟的空间内
任何帮助将不胜感激
答案 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流量......