最近我遇到了一个问题,我需要做一个GET
请求远程服务(我假设使用一个简单的 servlet),并且 RestTemplate 返回Too many redirects!
.
经过一番调查,似乎对指定远程服务发出的第一个请求实际上只是一个 302 重定向(到其自身),其中包含一些内容Set-Cookie
标头。如果我使用“普通”浏览器,它会确认标头,正确设置 cookie,并遵循重定向,满足正常的 200 响应。
我发现 RestTemplate 不接受Set-Cookie
header,因此重定向会一遍又一遍地进行。
有什么办法让 RestTemplate 承认Set-Cookie
标头,仅适用于当前请求?我最好不希望它保持状态,因为 RestTemplate 也从系统的其他部分使用。
Regards
Spring默认请求工厂(SimpleClientHttpRequestFactory
) 不处理cookie。将其替换为 Apache 的请求工厂HttpClient
具有 cookie 功能:
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
CloseableHttpClient httpClient = HttpClientBuilder
.create()
.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)