我想从我的计算机基本上嗅探http/https请求和响应到远程URL(基本上是REST API)。我了解有很多工具可以帮助我获得想要的东西,但是我必须写一个实用程序才能在Java中执行此操作(因为我们正在开发的某些应用程序将使用它)。
我想做的是设置代理(或反向代理 - 我对术语的理解受到限制),我将所有请求都路由到真实的API。该代理必须捕获请求正文(如果在帖子或提取的情况下)并将请求转发给真实API,捕获其响应并将其发送回客户。
我遇到了 utchate ,使用我能够使用其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
设置为a 代理,并将我的URL保留为http://myrealapplication.com/rest/operation1
,因此当响应来自实际API时,它可以向最终客户端。
我可以使用Undertow实现这一目标吗?还是还有其他可以在程序中使用的Java API的工具?
请帮助!
谢谢Sriram
我认为您实际寻找的是前向代理。这是示例代码,可以帮助您创建一个。
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();
}
}
希望它有帮助!;)