使用 vert.x 反向代理时以纯文本形式捕获 http 响应

问题描述 投票:0回答:1

我正在尝试使用 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 的处理程序

http proxy reverse-proxy vert.x vert.x-webclient
1个回答
0
投票

我应该你可以使用 context.response.getBody() 和 setBody() 来做到这一点,getBody().stream() 是一个 ReadStream,你可以像 readstream 这样处理,然后将Body设置为响应

© www.soinside.com 2019 - 2024. All rights reserved.