ログインが必要な保護されたリソースがあります。次のコードブロックで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();
上記は基本的にログインする場所です。これは、素敵なJSESSIONIDCookieを取り戻すことで問題なく機能します。
GetMethod get = new GetMethod("/admin/api.do?action=getSomeJson");
httpClient.executeMethod(get);
2番目のリクエストのサーバーのロジックを確認すると、別のJSESSIONIDを使用していることがわかります。したがって、getはログインに失敗したようです。httpClientがCookieを管理し、同じCookieを送り返したという印象を受けました。UIを介して通常どおりアプリにログインすると、このテストコードではなく、各リクエストに同じCookieが表示されます。
String s = get.getResponseBodyAsString();
get.releaseConnection();
httpClientがgetリクエストを実行するときに、最初のpostリクエストと同じCookieを使用するようにするには、httpClientで何かを行う必要がありますか?
前もって感謝します。