我使用Spring的RestTemplate
类从组织外部的Web服务获取XML。
由于本地防火墙规则发生了变化,我需要在HTTP请求中指定一个特定的源端口。现在我无法在api,stackoverflow或任何有关如何执行此操作的教程中找到任何内容。
这不可能吗?
更一般地说,在线描述中,我发现使用特定的源端口通常是使用基于UDP的连接/应用程序完成的。这通常不是通过TCP完成的吗?
(我真的不认为它会有所帮助,但这里是代码片段,正如下面的评论者所说的那样):
MyRequest request = new MyRequest(); //whole thing done via jackson
RestTemplate templ = new RestTemplate();
this.serviceUrl = String.format("%s:%d", properties.getServiceUrl()
properties.getServicePort());
ExptectedResponse response = templ.postForObject(serviceUrl, request, ExptectedResponse.class);
答案 0 :(得分:1)
从短暂端口范围49152-65535中随机选择TCP连接的源端口。 TCP端口范围如下所示:RFC 6056 - Ephemeral Ports
" IANA定义的动态端口范围包括49152-65535 范围,用于选择短暂的端口。"
端口选择过程因使用的操作系统而异。这比典型的Java应用程序低得多,因此不受应用程序控制。
从技术上讲,您可以强制操作系统选择指定的端口,但正如我所提到的那样是特定于操作系统的,并且破坏了Java应用程序的经典可移植性。超级用户有一篇很好的帖子讨论了这个主题here。
我建议与更改防火墙的部门交谈,看看他们是否可以允许来自正常端口范围的出站连接。