Warm tip: This article is reproduced from serverfault.com, please click

其他-Wiremock 代理到不同的 Url,如 Apache ProxyPass

(其他 - Wiremock proxying to different Url like Apache ProxyPass)

发布于 2021-02-19 22:13:40

我想实现一些非常简单的事情:

将请求代理到

mock.com/foo?paramA=valueA&paramB=valueB

backend.com/bar?paramA=valueA&paramB=valueB

我想用 json 配置来做到这一点。

问题是 proxyBaseUrl 总是从输入中获取 FULL Url 并附加它,所以

{
    "request": {
        "method": "GET",
        "urlPattern": "/foo/.*"
    },
    "response": {
        "proxyBaseUrl": "http://backend.com/bar"
    }
}

我收到一个http://backend.com/bar/foo?paramA=valueA&paramB=valueB 显然不是我需要的请求

我需要一些方法来获取带有捕获组的请求 url 的一部分,例如

"urlPattern": "/foo/(.*)"

然后是一种将捕获的组插入到目标 url 路径中的方法 - 只有那个。

使用 JSON 配置如何做到这一点?

我已经检查了wiremock 文档并浏览了十几个讨论,但我仍然不清楚。

这两个帖子有相同的问题,没有得到任何答案:

https://groups.google.com/g/wiremock-user/c/UPO2vw4Jmhw/m/Rx0e8FtZBQAJ

https://groups.google.com/g/wiremock-user/c/EVw1qK7k8Fo/m/5iYg1SQEBAAJ

所以我想知道这在wiremock中是否可能?(在 Apache 中是 2 线)

Questioner
Deeepdigger
Viewed
0
agoff 2021-02-22 22:08:45

据我所知,代理不能以这种方式配置。查看文档,WireMock 将仅通过 proxyBaseUrl 代理相同的请求。

不幸的是,看起来你最好的选择是编写一个自定义响应转换器来为你执行此重定向。我认为转换器类中给出的请求/响应对象不会自行处理重定向,因此你可能需要设置自己的客户端来转发请求。

伪代码如:

class MyCustomTransformer extends ResponseTransformer {
    public String getName() {
         return "MyCustomTransformer";
    }

    @Override
    public Response transform(Request request, Response response, FileSource files, Parameters parameters) {
        Pattern pattern = Pattern.compile("/regex/url/to/match/");
        Matcher matcher = pattern.matcher(request.getUrl());

        if (matcher.matches()) {
            // Code to modify request and send via your own client
            // For the example, you've saved the returned response as `responseBody`
            return Response.Builder.like(response).but().body(responseBody.toJSONString()).build();
        } else {
            return response
        }
    }

}