Spring Restテンプレートを使用して、ログインのPOSTリクエストを実行しようとしています。
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
LinkedMultiValueMap<String, Object> mvm = new LinkedMultiValueMap<String, Object>();
mvm.add("LoginForm_Login", "login");
mvm.add("LoginForm_Password", "password");
ResponseEntity<String> result = restTemplate.exchange(uriDWLogin, HttpMethod.POST, requestEntity, String.class);
ResponseEntityのステータスは302です。このリクエストの本文を取得できなかったため、このリクエストに従って本文の応答を取得したいと思います。
18:59:59.170 MAIN [http-nio-8080-exec-83] DEBUG c.d.s.c.DemandwareCtlr - loginToSandbox - StatusResponse - 302
18:59:59.170 MAIN [http-nio-8080-exec-83] DEBUG c.d.s.c.DemandwareCtlr - loginToSandbox - BodyResponse -
この問題を解決するにはどうすればよいですか?!
リクエストがGETリクエストの場合、リダイレクトは自動的に実行されます( この回答 を参照)。 POSTリクエストでそれを実現するには、1つのオプションは、HttpComponentsClientHttpRequestFactory
などの別のリクエストファクトリを使用し、HttpClient
を使用するように設定することです。リダイレクトに従うために必要な設定( LaxRedirectStrategy を参照):
final RestTemplate restTemplate = new RestTemplate();
final HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
final HttpClient httpClient = HttpClientBuilder.create()
.setRedirectStrategy(new LaxRedirectStrategy())
.build();
factory.setHttpClient(httpClient);
restTemplate.setRequestFactory(factory);
私はテストしていませんが、これはうまくいくはずです。