如何捕获 HttpProxy 响应

Posted

技术标签:

【中文标题】如何捕获 HttpProxy 响应【英文标题】:How to capture HttpProxy responses 【发布时间】:2021-12-28 13:38:41 【问题描述】:

我有一个使用 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 错误并对其进行处理时捕获它。不幸的是,从网络代理文档(或我在网络上看到的为数不多的代码示例中的任何一个)都不清楚网络代理甚至能够做到这一点。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于如何捕获 HttpProxy 响应的主要内容,如果未能解决你的问题,请参考以下文章

硒 - 蟒蛇。如何捕获网络流量的响应[重复]

如何在 GraphQL Relay 中捕获查询的响应

HttpClient 如何在一个地方捕获每个响应

如何捕获 form.submit 的响应

如何捕获位置警报响应iphone

如果 Angular2 HTTP 响应数据不符合类型,我如何捕获错误