我正在尝试使用 vert.x 反向代理实现 HTTP 代理来捕获传入请求和传出响应。 但对于响应,我无法将其捕获为纯文本,而对于请求,我使用拦截器来拦截请求并将请求记录为纯文本。 如何以纯文本形式捕获响应。
这是我的代码 公共未来开始(Vertx vertx){ HttpClient proxyClient = vertx.createHttpClient();
HttpProxy proxy = HttpProxy.reverseProxy(proxyClient);
proxy.origin(targetPort, targetHost);
proxy.addInterceptor(new ProxyInterceptor() {
@Override
public Future<ProxyResponse> handleProxyRequest(ProxyContext context) {
ProxyRequest proxyRequest = context.request();
HttpServerRequest originalRequest = proxyRequest.proxiedRequest();
originalRequest.bodyHandler(requestBody -> {
LOG.info("Request Body: {}", requestBody.toString("UTF-8"));
});
// Continue the interception chain
return context.sendRequest();
}
});
proxy.addInterceptor(new ProxyInterceptor() {
@Override
public Future<Void> handleProxyResponse(ProxyContext context) {
ProxyResponse proxyResponse = context.response();
// there is no proxyResponse.proxiedResponse() method and no handlers for ProxyResponse either
return context.response().send();
}
});
HttpServer proxyServer = vertx.createHttpServer();
proxyServer.requestHandler(proxy).listen(listeningPort);
}
谢谢
尝试在请求接收器中使用相同的逻辑进行响应,但结果发现没有 proxyResponse.proxiedResponse() 方法,也没有 ProxyResponse 的处理程序
我应该你可以使用 context.response.getBody() 和 setBody() 来做到这一点,getBody().stream() 是一个 ReadStream,你可以像 readstream 这样处理,然后将Body设置为响应