Proxy 带代理服务器的Spring WebClient:缺少HTTP头

Proxy 带代理服务器的Spring WebClient:缺少HTTP头,proxy,http-headers,spring-webflux,reactor-netty,Proxy,Http Headers,Spring Webflux,Reactor Netty,我正在使用SpringBootStarterWebFlux 2.1.3.RELEASE中的SpringWebClient来检查代理服务器的匿名级别。在我使用WebClient通过一些代理服务器向自定义node.js http服务器发出一些请求后,我的请求中没有与代理相关的http头。我丢失了,例如,x-forwarded-for,via,x-proxy-id。。仅显示远程地址 据我所知,netty客户端通过tcp CONNECT为每种代理类型(HTTP、SOCKS4/5)连接到代理,这就是缺少头

我正在使用SpringBootStarterWebFlux 2.1.3.RELEASE中的SpringWebClient来检查代理服务器的匿名级别。在我使用WebClient通过一些代理服务器向自定义node.js http服务器发出一些请求后,我的请求中没有与代理相关的http头。我丢失了,例如,
x-forwarded-for,via,x-proxy-id
。。仅显示
远程地址

据我所知,netty客户端通过
tcp CONNECT
为每种代理类型(HTTP、SOCKS4/5)连接到代理,这就是缺少头的原因

问题: 有没有一种方法可以通过这种方法获取经典的代理HTTP头,或者有没有另一种方法可以通过WebClient配置代理服务器

我的示例配置:

HttpClient-HttpClient=HttpClient.create()
.TCP配置(TCP客户端->
TCP客户
.proxy(proxy->{
proxy.type(ProxyProvider.proxy.HTTP).address(新的InetSocketAddress(ip,端口));})
.option(ChannelOption.CONNECT\u超时\u毫秒,10000)
.doon已连接(连接->
连接
.addHandlerLast(新的ReadTimeoutHandler(10000))
.addHandlerLast(新WriteTimeoutHandler(10000));
ReactorClientHttpConnector连接器=新的ReactorClientHttpConnector(httpClient);
WebClient build=WebClient.builder()
.baseUrl(baseUrl)
.客户端连接器(连接器)
.build();
预期标题

{"user-agent":"ReactorNetty/0.8.4.RELEASE","host":"21X.8X.XX.145:8XX","accept":"*/*","x-proxy-id":"719306848","x-forwarded-for":"21X.8X.XX.145","via":"1.1 101.XX.8X.11X (Mikrotik HttpProxy)"} 
{"user-agent":"ReactorNetty/0.8.4.RELEASE","host":"21X.8X.XX.145:8XX","accept":"*/*"}
实际标题

{"user-agent":"ReactorNetty/0.8.4.RELEASE","host":"21X.8X.XX.145:8XX","accept":"*/*","x-proxy-id":"719306848","x-forwarded-for":"21X.8X.XX.145","via":"1.1 101.XX.8X.11X (Mikrotik HttpProxy)"} 
{"user-agent":"ReactorNetty/0.8.4.RELEASE","host":"21X.8X.XX.145:8XX","accept":"*/*"}

缺少标头的原因是CONNECT请求,该请求建立TCP隧道,而不是向代理发送HTTP请求

但不幸的是,正如


webclient为每种类型的代理发出连接请求所使用的底层netty客户端,该客户端不会更改

缺少头的原因是连接请求,它建立了一个TCP隧道,而不是向代理发送HTTP请求

但不幸的是,正如


webclient为每种类型的代理发出连接请求所使用的底层netty客户端,该客户端不会更改

我不明白你的问题。这些头由代理本身添加。如何检查服务器端是否存在这些头文件?您可以显示您使用的代码段吗?是的,头应该由代理添加,但当我向webclient发出请求时,它们不存在。我已经在一个小型node.js服务器上测试了这些请求,该服务器返回头。webclient的标题:
{“用户代理”:“ReactorNetty/0.8.4.RELEASE”,“host”:“21X.8X.XX.145:8XX”,“accept”:“*/*”}
另一个客户端的标题,例如失眠:
{“host”:“21X.8X.XX.145:8XX”,“用户代理”:“失眠/6.3.2”,“accept”:“*/*”,“x-proxy-id”:“719306848”,“x-forwarded-for”:“21X.8X.XX.145”,“via”:“1.1.x.11xx.8XX(Mikrotik HttpProxy)“}
@m.w.你有办法解决这个问题吗?@DenissM.不幸的是,没有,我切换到了node.js客户端。我的问题可能太难理解了吗?@BrianClozel也许你可以帮我们解决?这个问题对你来说还不清楚吗?我不明白你的问题。这些头是由代理本身添加的。你如何检查这些头是否存在在服务器端?您可以显示您使用的代码片段吗?是的,头应该由代理添加,但当我使用webclient发出请求时,它们不存在。我已经针对一个小型node.js服务器测试了请求,该服务器返回头。webclient的头:
{“user agent”:“ReactorNetty/0.8.4.RELEASE”,“host”:“21X.8X.XX.145:8XX”,“接受”:“*/*”}
其他客户端的标题,例如失眠:
{“主机”:“21X.8X.XX.145:8XX”,“用户代理”:“失眠/6.3.2”,“接受”:“*/*”,“x-proxy-id”:“719306848”,“x-forwarded-for”:“21X.8X.XX.145”,“via”:“1.1 101.XX.8X.11X(Mikrotik HttpProxy)”}
@m.w.你有办法解决这个问题吗?@DenissM.不幸的是,没有,我切换到了node.js客户端。我的问题可能太难理解了吗?@BrianClozel也许你能帮我们解决这个问题?这个问题对你来说还不清楚吗?