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



我想实现一些非常简单的东西:

代理一个请求到

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

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

我想用json配置来做这个。

问题是proxyBaseUrl总是从输入中获取完整的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?

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

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

Psuedo代码:

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
}
}
}

最新更新