【发布时间】:2021-05-04 11:26:19
【问题描述】:
关于带有多个 --data-raw 的 curl 请求的小问题,以及如何构造其 Java WebClient 对应项。
我有一个非常简单的 curl 请求:
curl -X GET https://some-url:8080/services/auth/login --data-raw username="some-user" --data-raw password="some-password"
我遇到困难的部分是 double --data-raw, username="some-user" --data-raw password="some-password"
我最初认为我可以将它们包装在 JSON 中,然后与 .body(BodyInserters.fromValue()) 结合使用,但事实并非如此。
--data-raw '{"username": "some-user", "password": "some-password"}'
然后我尝试了(基于此帖子评论):
webClient.mutate().baseUrl(someUrl).defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE).build().get().uri(uriBuilder -> uriBuilder.path(someRoute).queryParam("username", "some-user").queryParam("password", "some-password").build()).retrieve().bodyToMono(String.class);
以上都不起作用。
请问如何使用 Java Spring WebClient 发送此 curl 请求的等价物?
谢谢
【问题讨论】:
-
curls
-d, --data, --data-raw将内容类型隐式设置为application/x-www-form-urlencoded。您是否尝试过在 webclient 中设置内容类型标头? -
(已更正)...和多个 --data 选项,每个选项都应该(和你的)name=value,与 & 组合,这就是 x-www-form-urlencoded被定义为工作。请注意,使用包含需要百分比编码的字符的 --data-raw 值(您不需要)将导致服务器解析错误并可能失败。
-
您好,非常感谢您的 cmets,非常感谢。我根据你们的输入编辑了原始问题