首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Browsermob (java):无法重写URL

Browsermob (java):无法重写URL
EN

Stack Overflow用户
提问于 2016-05-31 14:09:15
回答 1查看 1.3K关注 0票数 0

我使用的是BrowserMob代理,我希望将流量从生产服务器重定向到测试服务器。为此,我以如下方式使用rewriteUrl

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {

        BrowserMobProxyServer server = new BrowserMobProxyServer();
        server.setTrustAllServers(true);

        server.start(8888);
        server.rewriteUrl("(https?://)init.mycompany.com(.*)","$1platform-sandbox.mycompany.com$2//");

        if (server.isStarted()) {
            System.out.println("Server started on " + server.getClientBindAddress() + ":" + server.getPort());
        }

        server.addRequestFilter(new RequestFilter() {
            @Override
            public HttpResponse filterRequest(io.netty.handler.codec.http.HttpRequest httpRequest, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
                System.out.println("REQUEST");
                System.out.println("Original: " + httpMessageInfo.getOriginalUrl());
                System.out.println("Current: " + httpMessageInfo.getUrl());
                return null;
            }
        });

        server.addResponseFilter(new ResponseFilter() {
            @Override
            public void filterResponse(HttpResponse httpResponse, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
                System.out.println("RESPONSE");
                System.out.println("Original: " + httpMessageInfo.getOriginalUrl());
                System.out.println("Current: " + httpMessageInfo.getUrl());
                if (httpMessageInfo.getOriginalUrl() != httpMessageInfo.getUrl()) {
                    System.out.printf("DIFFERENT!!!!");
                }
            }
        });

        server.newHar("test");
        while (true) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

你会注意到我取得了部分成功:

  1. 最后添加两个//符号(用于测试)。
  2. 然而,init并没有被platform-sandbox取代。

请求

原件:https://init.mycompany.com

电流:https://init.mycompany.com

请求

原件:https://init.mycompany.com/sdk/v6.4.6?applicationKey=42a8c1f5

电流:https://init.mycompany.com/sdk/v6.4.6?applicationKey=42a8c1f5

响应

原件:https://init.mycompany.com/sdk/v6.4.6?applicationKey=42a8c1f5

电流:https://init.mycompany.com/sdk/v6.4.6?applicationKey=42a8c1f5//

EN

回答 1

Stack Overflow用户

发布于 2016-07-06 11:00:23

我已经用http请求测试了您的代码,它运行良好(initplatform-sandbox替换)。

这个问题只出现在https请求的情况下。当您请求https时,请求方法CONNECT用于建立隧道连接。目前,如果请求方法是CONNECT,Browsermob不支持重写URL。

源代码中有更多的细节。您可以在代码中的这一行上设置断点,并通过此点调试http和https流量,以查看差异。在使用https通信时,使用请求方法CONNECT时,RewriteUrlFilter返回null,而重写规则不适用于此类请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37548069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档