如何使用指定的端口号发送Java HTTP请求

如何使用指定的端口号发送Java HTTP请求

问题描述:

我有两个需要使用HTTP相互通信的应用程序。每个人当前都是使用HttpServer类的服务器,并使用Apaches HTTP client library发出请求。如何使用指定的端口号发送Java HTTP请求

其中一个应用程序在运行之前将知道其他端口地址,例如,端口8000意味着它使用这个来产生一个可以被另一个应用程序处理的H​​TTP请求。但是,如果第二个应用程序想要向第一个应用程序发送请求,它将不知道将响应发送到哪个端口。发生这种情况是因为第一个应用程序将使用将动态选择端口的HTTP客户端库发送请求,例如,端口6543,这意味着第二个应用程序无法保存并稍后使用它。

实施例:

应用1上的负载与本地主机端口8000

应用2负载上localhost通过端口8050

应用1知道该应用程序2是8050和发送请求它获取由应用2处理。

应用2希望向应用1发送请求,但它不知道其端口,因为先前的请求是使用动态分配的端口发送的。

除了第一个应用程序将其服务器端口号发送到应用程序之外,是否还有这种情况?

我不知道究竟是你想怎么办。如果客户端发送HTTP请求,它实际上可以从同一个连接读取响应,为什么要通过不同的连接发送它并创建开销。如果你想实现它,那么除了客户端服务器为他们的请求响应交换端口信息并且它们也充当客户端+服务器之外,没有办法。这些信息可以在请求中使用HTTP头交换。

我相信你在这里与TCP和HTTP端口混淆。

然而第二应用将获得请求,并处理和 不知道该响应发送到因为HTTP客户端 库将动态地选择一个端口,例如哪个端口端口6543

您的服务器不仅仅是挑选一个动态端口来发送响应,它是底层TCP用于发送响应的任意端口。 TCP通常是与HTTP协议一起使用的底层传输协议。 TCP客户端发送一个名为“客户端端口”的标头,告诉服务器他们想要接收响应的位置。这些端口号是从客户端的一系列空闲端口中随机选取的。

+0

一个示例场景是,应用程序1以在端口8000上运行的本地主机上的服务器启动。应用程序2以带有端口8050的本地主机上的服务器启动。应用程序1知道应用程序2s端口,因此使用HTTP客户端将其发送到localhost:8000,哪个应用程序2收到,但是当它尝试稍后向应用程序1发送HTTP请求时,它不知道应用程序1的服务器端口正在运行。 – Tom

+0

@TomWilkins为什么app1不能在其请求中添加一个HTTP标题来提及它的侦听端口? –

+0

其实你是正确的,我可以将它添加为一个HTTP头.....总是看看简单的解决方案:/(想要回答“添加一个HTTP头到应用程序1,所以应用程序2可以使用它”或所以我可以打勾。) – Tom

+0

啊,所以只需要完成它并使用POST发送端口? – Tom