【问题标题】:How to disable cookies with Spring WebClient如何使用 Spring WebClient 禁用 cookie
【发布时间】:2019-06-21 00:45:54
【问题描述】:
【问题讨论】:
标签:
java
spring-boot
kotlin
spring-webflux
reactor-netty
【解决方案1】:
看起来没有办法禁用 cookie 处理本身,但这似乎有效:创建您自己的 HttpClient,然后使用 HttpClient.doOnRequest 注册一个回调,以便在发送请求之前调用。在回调中调用 HttpClientRequest.requestHeaders() 获取请求头,然后删除Cookie 头。
在发送请求之前删除 User-Agent 标头的示例代码。
public class Main {
public static void main(String[] args) {
HttpClient httpClient = HttpClient.create().doOnRequest((request, connection) -> {
request.requestHeaders().remove("User-Agent");
});
WebClient client = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
Mono<String> r = client.get().uri("https://www.google.com").retrieve()
.bodyToMono(String.class);
System.out.println(r.block());
}
}
【解决方案2】:
在我的测试中,我没有看到 Reactor Netty HttpClient 对响应中返回的 cookie 做任何事情。我实际上希望启用像 Apache HttpClient 支持的 cookie 存储,但所有迹象表明 Netty HttpClient 没有这样的功能。
在entire codebase of Reactor Netty 中,除了其中一项单元测试外,没有使用“set-cookie”标头。这告诉我,除非客户端代码选择查找它们,否则默认情况下会忽略 cookie。