关于java:录制时,我可以为WireMock指定–proxy-all参数以匹配任何网站吗?

Can I specify a --proxy-all parameter to WireMock to match any web site when recording?

我正在构建代理服务,以使用WireMock记录和播放Web上的响应。我最近发现这两种模式是分开的,因此我试图构建一小组Docker容器来并行运行这些服务。

简而言之,我的计划是设置一个WireMock进行记录,然后让另一个实例(在另一个端口上)进行回放。我将定期在cron上将映射从一个映射复制到另一个映射,然后将reset API调用发送到播放实例以重新加载新的定义。

因此,我目前正在录音机上工作。从特定站点进行记录的一种简单方法是执行以下操作:

1
2
3
4
5
java -jar wiremock-standalone-2.4.1.jar \\
    --port 8080 \\
    --proxy-all="http://www.example.com/" \\
    --record-mappings \\
    --verbose

但是,这将长时间运行的实例锁定到www.example.com,而实际上我希望它记录我发送给它的任何内容。使用不带参数的--proxy-all不起作用(这会在HTTP客户端中导致500个错误,大概是WireMock自身发出的)。

另一方面,

省略--proxy-all会导致404,因为大概WireMock不知道要去哪里。因此,我想做类似的事情:

1
--proxy-all=*

我在命令行上看不到任何文档说支持此功能,所以我想知道admin API是否支持此功能?另一种选择是让我构建自己的API,以在指定的代理URL上停止并重新启动WireMock,但是如果已经实现,我宁愿不重新发明轮子。

正如我在另一个问题上所说,使用Mountebank可能是一种选择,因为它似乎有一个API。但是,这似乎涉及更多,并且由于我有90%的WireMock经验,所以我会尽可能坚持下去。


我已通过在带有自动重新启动选项的Supervisor的外壳程序包装中运行WireMock,然后在API上调用/__admin/shutdown来解决此问题。

shell包装器使用通过--proxy-all开关设置的代理目标集启动WireMock。因此,当它关闭时,代理目标会自动更改,因为它会自动恢复。