如何捕获 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 响应的主要内容,如果未能解决你的问题,请参考以下文章