java - 在 Spring Webflux 中添加的多个 cookie 未合并到单个 HTTP 标头中
问题描述
我正在尝试使用包含多个 cookie 的 Spring Webflux 的 WebClient 发送请求。我的代码如下所示:
Mono<Void> loginCall = webClient.post()
.uri("/Sites/Login")
.cookie("key1", "value1")
.cookie("key2", "value2")
.cookie("key3", "value3")
.exchange()
.flatMap(clientResponse -> clientResponse.bodyToMono(Void.class));
我在端点上收到的内容如下所示(注意多个 cookie 标头):
$ nc -l -p 8989
POST /Sites/Login HTTP/1.1
user-agent: ReactorNetty/0.8.11.RELEASE
host: localhost:8989
accept: */*
transfer-encoding: chunked
cookie: key1=value1
cookie: key2=value2
cookie: key3=value3
我的期望是收到这样的 HTTP 请求(单个 cookie 标头):
cookie: key1=value1; key2=value2; key3=value3
我正在使用 Spring Boot 2.1.8。
我尝试了很多方法,但我尝试的所有方法都会导致多个 cookie 标头。HTTP 规范非常清楚不能使用多个 cookie 标头这一事实(而且接收此请求的我的 Web 服务器也不喜欢它)。
如何向 WebClient 请求添加多个 cookie,以便将它们合并到单个 HTTP 标头中?(是的,我可以开始手动设置标题并合并 cookie,但这不知怎么感觉不对)
解决方案
有同样的问题,我发现的唯一方法是像这样手动生成“Cookie”标题(Groovy 语言):
UserInfo retrieveUserInfo(List<Cookie> cookies) {
String cookieHeader = cookies.collect { "${it.name}=${it.value}" }.join('; ')
return webClient
.get()
.uri('your API path here')
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.header(HttpHeaders.COOKIE, cookieHeader)
.retrieve()
.bodyToMono(UserInfo.class)
.block()
}
推荐阅读
- javascript - 重构 javascript 代码以创建 for 循环
- python - Postgres CSV UTF8 编码问题 åäö (Python)
- hadoop - 在 hadoop 1.2.1 中 Namenode 服务不稳定
- sql - 如何在 SQL Server 查询中连接多个表(超过 2 个)?
- tableau-api - 根据仪表板中的工作表隐藏过滤器
- rxjs - 返回满足某些条件后接收值的 Rxjs Observable
- android - 为什么 Livedata setValue 在调用两次时会被忽略?
- python - 我是 Python 新手。而且这个递归程序往往因为一些我无法弄清楚的奇怪原因而无法运行。任何帮助将不胜感激
- python-3.x - Django 在 Django 模型中创建数组
- java - 访问资产文件时出现 FileNotFoundException