如何捕获 HttpProxy 响应

How to capture HttpProxy responses

我有一个使用 Vert.x Web 代理的反向代理服务器,使用非常标准的代码实现:

  ...

  HttpClient client = theVertx.createHttpClient();
  HttpProxy proxy = HttpProxy.reverseProxy(client);
  
  Route anyroute = theRouter.route("/*");
  anyroute.handler(ProxyHandler.create(proxy));     
  anyroute.failureHandler(hnd->{
     System.out.println("Failure. Return code: "+hnd.response().getStatusCode());
  });

  ...

此代码运行良好,但我希望能够捕获 return 代码以执行一些自定义操作(例如在发生 400 次失败时显示自定义网页)。我看到当我导致 404 错误发生时,没有调用 failureHandler() 方法中的代码。显然,如果我请求目标服务器上不存在的资源,代理实际上 returns 目标服务器发送回浏览器的 404 错误!

我想在代理收到 404 错误时捕获它并对其进行处理。不幸的是,从网络代理文档(或我在网络上看到的相当少的代码示例中的任何一个)来看,网络代理甚至能够做到这一点并不清楚。

是否可以编写一个处理程序来捕获来自 HttpProxy 的响应?如果是,我该怎么做?

这个问题的答案很简单:如果要捕获响应,请不要使用 HttpProxy。

查看 Vertx Web Proxy 源代码后,我清楚地知道 HttpProxy 没有捕获响应的能力。有必要实施这样做的 Web 代理。

我将大部分 Vertx Web 代理代码吸收到我的应用程序中,并创建了一个代理库,它不仅可以捕获响应,还可以捕获请求。新的 Web 代理,称为 F3WebProxy,具有 lambda,允许在代理开始处理请求时编写自定义操作,并在收到响应时编写自定义操作。界面非常简单易用。