java apache commons httpclient 4.23表单登录问题不同请求中使用的不同会话cookie
我有一个受保护的资源,需要我登录。我正在使用commons客户端和以下代码块
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
httpClient.getParams().setParameter("http.protocol.single-cookie-header", Boolean.TRUE);
PostMethod postMethod = new PostMethod("/admin/adminlogon.do");
postMethod.setRequestEntity(new StringRequestEntity("action=logon&adminUser=admin&adminPassword=password",
"application/x-www-form-urlencoded",
"UTF-8"));
postMethod.addParameter("action","logon");
postMethod.addParameter("adminUser","admin");
postMethod.addParameter("adminPassword","password");
httpClient.executeMethod(postMethod);
String response2 = postMethod.getResponseBodyAsString();
上面是我基本登录的地方。这很好,我得到了一个很好的小JSESSIONID饼干回来
GetMethod get = new GetMethod("/admin/api.do?action=getSomeJson");
httpClient.executeMethod(get);
当我在服务器上检查第二个请求的逻辑时,我注意到我们使用的是不同的JSESSIONID。因此,get似乎无法登录。我的印象是,httpClient管理了这些cookie,并将相同的cookie发送了回去。当我正常地通过UI登录我的应用程序时,我在每个请求中看到相同的cookie,只是在这个测试代码中没有
String s = get.getResponseBodyAsString();
get.releaseConnection();
我需要对httpClient做些什么来确保它在执行get请求时使用与第一次post请求相同的cookie吗
提前谢谢
# 1 楼答案
关于HTTP客户端cookie行为的假设是正确的。 在您的情况下,您不能使用相同的httpClient实例。要修复它,只需分配一次httpClient(在PostConstructor中):
然后,使用同一个客户端实例执行调用。客户端将从响应中获取一个cookie,将其存储在cookieStore中,并将其与下一个请求一起发送
[评论后添加] 以下代码适用于我: