0

我有一个使用 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());
  });

  ...

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

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

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

4

1 回答 1

0

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

在查看了 Vertx Web 代理源代码后,我很清楚 HttpProxy 没有捕获响应的能力。有必要实现这样做的 Web 代理。

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

于 2021-11-23T19:11:36.207 回答