【问题标题】:Create a reverse proxy by littleproxy通过 littleproxy 创建反向代理
【发布时间】:2017-05-03 13:53:00
【问题描述】:

我是littleproxy的初学者,如何创建反向代理服务器?

我的代理从客户端获取请求并将它们发送到服务器(服务器仅与 www.xxx.com 相同的常规站点仅包含网页(不休息)并且代理从服务器(网页)获取响应并返回到客户。

例如,客户端 url 为 localhost:8080/x,代理将其映射到 www.myserver.com/xy 并为客户端显示 xy 页面。如何通过使用过滤器或 httpservlet 来做到这一点。

我的 http servlet 如下:

 public class ProxyFilter implements Filter {
      public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;

        HttpProxyServer server =
        DefaultHttpProxyServer.bootstrap()
        .withPort(8080)
        .withFiltersSource(new HttpFiltersSourceAdapter() {
            public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx) {
               return new HttpFiltersAdapter(originalRequest) {
                  @Override
                  public HttpResponse clientToProxyRequest(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return null;
                  }

                  @Override
                  public HttpResponse proxyToServerRequest(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return null;
                  }

                  @Override
                  public HttpObject serverToProxyResponse(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return httpObject;
                  }

                  @Override
                  public HttpObject proxyToClientResponse(HttpObject httpObject) {
                      // TODO: implement your filtering here ????
                      return httpObject;
                  }   
               };
            }
        })
        .start();
    }
    public void init(FilterConfig config) throws ServletException {

    }
    public void destroy() {

    }
}

【问题讨论】:

    标签: java filter proxy little-proxy


    【解决方案1】:

    LittleProxy 使用Host 标头进行路由。因此,您可以做的最简单的事情是在clientToProxyRequest 方法中将Host 设置为真实服务器。

    公共 HttpResponse clientToProxyRequest(HttpObject httpObject) { if(httpObject instanceof FullHttpRequest) { FullHttpRequest httpRequest = (FullHttpRequest)httpObject; httpRequest.headers().remove("主机"); httpRequest.headers().add("主机", "myserver.com:8080"); } 返回空值; }

    【讨论】:

    • 我还必须添加 .withAllowRequestToOriginServer(true)
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多