当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring的WebClient发送带有自定义标题的删除请求?

钮兴安
2023-03-14

我想发送一个带有自定义头的http删除请求。

我试图用Spring的WebClient实现这一点,代码如下:

@Test
public void validateDeleteCouldCarryHeader() {
    WebClient.create("https://jira.spring.io/")
            .delete()
            .header("X-FOO", "BAR")
            .retrieve()
            .bodyToMono(Map.class)
            .block();
}

我期待着这样的事情:

DELETE / HTTP/1.1
X-FOO: BAR 
...
content-length: 0

但是,实际的要求是:

DELETE / HTTP/1.1
user-agent: ReactorNetty/0.7.0.RELEASE
host: jira.spring.io
accept: */*
accept-encoding: gzip
content-length: 0

我错过了一些东西包括自定义标题X-FOO吗?

更新1:我将Reactornetty升级为0.7.3。释放

缺少的标题仍然缺少:

DELETE / HTTP/1.1
user-agent: ReactorNetty/0.7.3.RELEASE
host: jira.spring.io
accept: */*
accept-encoding: gzip
content-length: 0
2018-12-28 22:32:32.813 DEBUG 12064 --- [ctor-http-nio-4] r.ipc.netty.http.client.HttpClient       : [id: 0x2c6a9cea, L:/172.17.1.131:54532 - R:jira.spring.io/35.199.60.33:443] WRITE: 138B
        +-------------------------------------------------+
        |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 44 45 4c 45 54 45 20 2f 20 48 54 54 50 2f 31 2e |DELETE / HTTP/1.|
|00000010| 31 0d 0a 75 73 65 72 2d 61 67 65 6e 74 3a 20 52 |1..user-agent: R|
|00000020| 65 61 63 74 6f 72 4e 65 74 74 79 2f 30 2e 37 2e |eactorNetty/0.7.|
|00000030| 33 2e 52 45 4c 45 41 53 45 0d 0a 68 6f 73 74 3a |3.RELEASE..host:|
|00000040| 20 6a 69 72 61 2e 73 70 72 69 6e 67 2e 69 6f 0d | jira.spring.io.|
|00000050| 0a 61 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 61 63 |.accept: */*..ac|
|00000060| 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 3a 20 67 |cept-encoding: g|
|00000070| 7a 69 70 0d 0a 63 6f 6e 74 65 6e 74 2d 6c 65 6e |zip..content-len|
|00000080| 67 74 68 3a 20 30 0d 0a 0d 0a                   |gth: 0....      |
+--------+-------------------------------------------------+----------------+

更新2:我发现在我的pom中导入了一个Reactor的BOM(铋释放),在删除该BOM后,Spring Boot 2.0.5。发布包括我想要的自定义标题。

DELETE / HTTP/1.1
user-agent: ReactorNetty/0.7.9.RELEASE
host: jira.spring.io
accept: */*
accept-encoding: gzip
X-FOO: BAR

共有1个答案

夏星阑
2023-03-14

Reactor网0.7.0。RELEASE现在已经很旧了,您应该升级到新版本。

我试图重现这一点,但做不到。

reactor.ipc.netty.http.client.HttpClient的日志级别设置为"DEBUG"显示:

[reactor-http-nio-4] DEBUG reactor.ipc.netty.http.client.HttpClient - [id: 0x69202b84, L:/192.168.0.28:60880 - R:jira.spring.io/35.199.60.33:443] WRITE: 150B
         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 44 45 4c 45 54 45 20 2f 20 48 54 54 50 2f 31 2e |DELETE / HTTP/1.|
|00000010| 31 0d 0a 75 73 65 72 2d 61 67 65 6e 74 3a 20 52 |1..user-agent: R|
|00000020| 65 61 63 74 6f 72 4e 65 74 74 79 2f 30 2e 37 2e |eactorNetty/0.7.|
|00000030| 30 2e 52 45 4c 45 41 53 45 0d 0a 68 6f 73 74 3a |0.RELEASE..host:|
|00000040| 20 6a 69 72 61 2e 73 70 72 69 6e 67 2e 69 6f 0d | jira.spring.io.|
|00000050| 0a 61 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 61 63 |.accept: */*..ac|
|00000060| 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 3a 20 67 |cept-encoding: g|
|00000070| 7a 69 70 0d 0a 58 2d 46 4f 4f 3a 20 42 41 52 0d |zip..X-FOO: BAR.|
|00000080| 0a 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3a |.content-length:|
|00000090| 20 30 0d 0a 0d 0a                               | 0....          |
+--------+-------------------------------------------------+----------------+

所以客户端确实在发送这些头。也许您捕获传出请求信息的方式有问题?

 类似资料:
  • 我在ReactJS中编程时使用Axios,我假装向服务器发送DELETE请求。 为此,我需要标题: 而身体是由 我一直在互联网上搜索,只发现DELETE方法需要一个“参数”,不接受“数据”。 我一直试图这样发送: 或者甚至 但似乎没有什么工作... 有人能告诉我是否有可能(我想是这样)发送一个包含标题和正文的删除请求,以及如何做到这一点吗? 提前谢谢你!

  • 问题内容: 使用urllib2.urlopen(..)时,我想在请求中发送自定义的“ Accept”标头。我怎么做? 问题答案: 不完全的。创建对象实际上并不发送请求,并且Request对象没有方法。(还:是小写字母。)您需要做的就是将用作第一个参数,这将给您您的答复。

  • 我在通过C#API中的WebClient发送POST请求时遇到问题。该职位要求如下: 我知道如何处理像用户代理等标题。,但是我对边界有一个问题。我不知道怎么把它们放在哪里...

  • 我通过IDE为Liferay 7.2创建了一个自定义主题。当我试图修改任何小部件的“外观”设置时,我无法删除标题或看到“应用程序装饰器”选项的下拉列表。 我遵循本教程创建了“liferay外观和感觉.xml”。使用此文件,现在可以看到选项的下拉列表,但我仍然无法删除任何标题。甚至在“使用自定义标题”中选择“Barebone”选项和“No”。 我打印了portlet首选项,“portletSetup

  • 问题内容: 我在ReactJS编程时使用Axios,我假装将DELETE请求发送到我的服务器。 为此,我需要标题: 身体是由 我一直在互联网上进行搜索,仅发现DELETE方法需要一个“参数”,并且不接受“数据”。 我一直试图像这样发送它: 甚至 但是似乎没有任何作用… 有人可以告诉我是否有可能(可能是这样)发送带有标头和正文的DELETE请求,以及如何发送? 先感谢您! 问题答案: 因此,经过多次

  • 我使用这段代码来最大化和恢复我的自定义表单。但是当窗体最大化时,它仍然可以拖动,我使用计时器来拖动窗体。