我正在尝试实现一些非常简单的事情:
将请求代理至
mock.com/foo?paramA=valueA¶mB=valueB
到
backend.com/bar?paramA=valueA¶mB=valueB
我想用 json 配置来做到这一点。
问题是 proxyBaseUrl 总是从输入中获取完整的 Url 并附加它,所以
{
"request": {
"method": "GET",
"urlPattern": "/foo/.*"
},
"response": {
"proxyBaseUrl": "http://backend.com/bar"
}
}
我收到一个请求
http://backend.com/bar/foo?paramA=valueA¶mB=valueB
这显然不是我需要的。
我需要某种方法来使用捕获组来获取部分请求网址,例如
"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 行)
据我所知,代理不能以这种方式配置。查看文档,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
}
}
}
这可以使用
proxyUrlPrefixToRemove
来完成。
改编自https://wiremock.org/docs/proxying/#remove-path-prefix
{
"request": {
"method": "GET",
"urlPattern": "/foo/.*"
},
"response": {
"proxyBaseUrl": "http://backend.com/bar"
"proxyUrlPrefixToRemove": "/foo"
}
}
发送至
mock.com/foo?paramA=valueA¶mB=valueB
的请求将转发至 http://backend.com/bar?paramA=valueA¶mB=valueB