monkeyWie / proxyee

HTTP proxy server,support HTTPS&websocket.MITM impl,intercept and tamper HTTPS traffic.
MIT License
1.53k stars 573 forks source link

修改一个域名下部分接口的链接地址没有生效 #75

Open wayddmldbzz opened 4 years ago

wayddmldbzz commented 4 years ago

之前的问题描述不对,我觉得我的现象是,改一个域名下所有的接口的跳转地址是没问题的,但是如果我只想修改一个域名下部分接口的地址貌似不行 例如:域名 www.aaaa.com 下面有2个接口 我只想把其中一个接口的链接地址修改下,剩下的还用本身的链接地址,这样没生效,调用的还是之前的。

monkeyWie commented 4 years ago

把代码贴出来看一下吧

wayddmldbzz commented 4 years ago
.proxyInterceptInitializer(new HttpProxyInterceptInitializer() {
        @Override
        public void init(HttpProxyInterceptPipeline pipeline) {

        pipeline.addLast(new HttpProxyIntercept() {

            @Override
            public void beforeRequest(Channel clientChannel, HttpRequest httpRequest, HttpProxyInterceptPipeline pipeline) throws Exception {
                jsonArray.forEach(o -> {
                    JSONObject jsonObject = JSON.parseObject(JSONObject.toJSONString(o));
                    // 这里的判断是整个域名替换,这样是没问题的
                    // 如果我在这里的判断加上判断只替换这个域名下部分接口的链接地址,那么被替换的接口就没有生效还是会指向本身的地址不是我替换的地址
                    if (pipeline.getRequestProto().getHost().equals(jsonObject.getString("old"))) {
                        pipeline.getRequestProto().setHost(jsonObject.getString("new"));
                    }
                });
                pipeline.beforeRequest(clientChannel, httpRequest);
            }
        });
    });
monkeyWie commented 4 years ago

如果是要修改uri的话,可以通过修改httpRequest对象实现,例如:

httpRequest.setUri("/api2")
wayddmldbzz commented 4 years ago

@monkeyWie 不是修改uri,使用的时候一个域名下面有很多uri(其实就是有很多接口),如果所有接口都修改域名地址是没问题的,但是我如果要判断这个域名下某个uri修改域名地址,其余的uri不修改,这样的话修改的是不生效的