我使用的是BrowserMob代理,我希望将流量从生产服务器重定向到测试服务器。为此,我以如下方式使用rewriteUrl:
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();
}
}
}
}你会注意到我取得了部分成功:
//符号(用于测试)。init并没有被platform-sandbox取代。请求
请求
原件: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//
发布于 2016-07-06 11:00:23
我已经用http请求测试了您的代码,它运行良好(init被platform-sandbox替换)。
这个问题只出现在https请求的情况下。当您请求https时,请求方法CONNECT用于建立隧道连接。目前,如果请求方法是CONNECT,Browsermob不支持重写URL。
源代码中有更多的细节。您可以在代码中的这一行上设置断点,并通过此点调试http和https流量,以查看差异。在使用https通信时,使用请求方法CONNECT时,RewriteUrlFilter返回null,而重写规则不适用于此类请求。
https://stackoverflow.com/questions/37548069
复制相似问题