gpt4 book ai didi

java - Undertow - 如何设置反向代理以监控流向我的 REST API 的 HTTP/HTTPS 流量

转载 作者:行者123 更新时间:2023-11-30 10:21:22 25 4
gpt4 key购买 nike

我想基本上嗅探从我的计算机到远程 URL(基本上是 REST API)的 HTTP/HTTPS 请求和响应。我知道有很多工具可以帮助我获得我想要的东西,但我必须用 Java 编写一个实用程序来执行此操作(因为我们正在开发的某些应用程序将使用它)。

我想做的是设置一个代理(或反向代理——我对这里的术语的理解有限),通过它我将所有请求路由到真实的 API。该代理必须捕获请求主体(在 POST 或 PUT 的情况下)并将请求转发到真实的 API,捕获其响应并将其发送回客户端。

我遇到了 Undertow,使用它我能够使用其 LoadBalancingProxyClient 代理客户端创建和运行反向代理。但我有几个问题。

假设我的 API 是 http://myrealapplication.com/rest/operation1,我想向这个 API 发送一个 JSON。

我已经创建了一个代理服务器如下:

        LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient();
loadBalancer.addHost(new URI("http://myrealapplication.com"));
loadBalancer.setConnectionsPerThread(20);

Undertow reverseProxy = Undertow.builder()
.addHttpListener(8990, "localhost")
.setIoThreads(4)
.setHandler(Handlers.requestDump(new ProxyHandler(loadBalancer, 3000, null)))
.build();
reverseProxy.start();

所以一旦我启动了我的反向代理服务器,就会有两件事:

  1. 我的反向代理实际上已经成为我真实 API 的某种别名,但我如何在这一层捕获请求和响应?
  2. 使用上述设置,为了让我的请求通过这个代理,我必须将我的 URL 更改为 http://localhost:8990/rest/operation1,这可能是 Not Acceptable ,因为我们期望做的是将 localhost:8990 设置为 Proxy,并将我的 URL 保留为 http://myrealapplication.com/rest/operation1,以便它在响应来自实际 API 时查看最终客户端。

我可以使用 undertow 来实现吗?或者是否有任何其他工具可以公开我可以在我的程序中使用的 Java API?

请帮忙!

谢谢,斯里拉姆

最佳答案

我认为您真正要找的是 Forward Proxy .这是示例代码,可帮助您创建一个。

public class ForwardProxyWithUndertow {

public static void main( String[] args ) {
final HttpHandler forwardProxyHandler = new ConnectHandler(ForwardProxyWithUndertow::handleNotFound );

Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler( forwardProxyHandler )
.build()
.start();
}

static void handleNotFound( HttpServerExchange e ){
e.setStatusCode(404);
e.endExchange();
}
}

希望对您有所帮助! ;)

关于java - Undertow - 如何设置反向代理以监控流向我的 REST API 的 HTTP/HTTPS 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47921483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com