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

Java Undertow-如何设置反向代理以监视到我的REST API的HTTP/HTTPS流量,java,proxy,reverse-proxy,undertow,Java,Proxy,Reverse Proxy,Undertow,我想基本上嗅探从我的计算机到远程URL(基本上是RESTAPI)的HTTP/HTTPS请求和响应。我知道有很多工具可以帮助我得到我想要的东西,但我必须用Java编写一个实用程序来实现这一点(因为这将被我们正在开发的一些应用程序所使用) 我想做的是设置一个代理(或者反向代理——我对术语的理解在这里是有限的),通过它我将所有请求路由到真正的API。此代理必须捕获请求主体(在POST或PUT的情况下)并将请求转发到真实API,捕获其响应并将其发送回客户端 我遇到了Undertow,使用它,我能够使用其

我想基本上嗅探从我的计算机到远程URL(基本上是RESTAPI)的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();
因此,启动反向代理服务器后,有两件事:

  • 我的反向代理实际上已经成为我真正的API的别名,但是我如何在这一层中捕获请求和响应呢
  • 使用上述设置,为了让我的请求通过此代理,我必须将我的URL更改为
    http://localhost:8990/rest/operation1
    ,这可能是不可接受的,因为我们希望做的是将
    localhost:8990
    设置为代理,并将我的URL保留为
    http://myrealapplication.com/rest/operation1
    ,因此当响应来自实际API时,它会向最终客户机发出提示
  • 我可以使用底拖来实现这一点吗?或者有没有其他工具可以公开我可以在程序中使用的Java API

    请帮忙

    谢谢,
    斯里拉姆

    我认为你实际上在寻找的是一个。 下面是帮助您创建一个的示例代码

    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();
      }
    }
    

    希望能有帮助!;)

    谢谢,但是如何捕获请求和响应?