WireMock可以播放来自多个域的请求吗?

我正在构建一个Dockerised记录播放系统来帮助我记录网站,所以我可以设计一个本地版本的刮刀,而不是真实的东西。 这意味着我不会使用自动请求来淹没网站,并且具有额外的优势,即我不需要连接到网络即可工作。

我在内部使用了基于Java的WireMock,它使用Wget从站点擦除队列中进行记录。 我正在使用WireMock API从它记录的映射中读取各种片段信息。

但是,我从映射响应中发现,似乎没有记录域信息(除非它偶然出现在响应头中)。 请参阅__admin/mappings的以下响应:

 { "result": { "ok": true, "list": [ { "id": "794d609f-99b9-376d-b6b8-04dab161c023", "uuid": "794d609f-99b9-376d-b6b8-04dab161c023", "request": { "url": "/robots.txt", "method": "GET" }, "response": { "status": 404, "bodyFileName": "body-robots.txt-j9qqJ.txt", "headers": { "Server": "nginx/1.0.15", "Date": "Wed, 04 Jan 2017 21:04:40 GMT", "Content-Type": "text/html", "Connection": "keep-alive" } } }, { "id": "e246fac2-f9ad-3799-b7b7-066941408b8b", "uuid": "e246fac2-f9ad-3799-b7b7-066941408b8b", "request": { "url": "/about/careers/", "method": "GET" }, "response": { "status": 200, "bodyFileName": "body-about-careers-GhVqy.txt", "headers": { "Server": "nginx/1.0.15", "Date": "Wed, 04 Jan 2017 21:04:35 GMT", "Content-Type": "text/html", "Last-Modified": "Wed, 04 Jan 2017 12:52:12 GMT", "Connection": "keep-alive", "X-CACHE-URI": "/about/careers/", "Accept-Ranges": "bytes" } } }, { "id": "def378f5-a93c-333e-9663-edcd30c936d7", "uuid": "def378f5-a93c-333e-9663-edcd30c936d7", "request": { "url": "/about/careers/feed/", "method": "GET" }, "response": { "status": 200, "bodyFileName": "body-careers-feed-Fd2fO.xml", "headers": { "Server": "nginx/1.0.15", "Date": "Wed, 04 Jan 2017 21:04:45 GMT", "Content-Type": "application/rss+xml; charset=UTF-8", "Transfer-Encoding": "chunked", "Connection": "keep-alive", "X-Powered-By": "PHP/5.3.3", "Vary": "Cookie", "X-Pingback": "http://www.example.com/xmlrpc.php", "Last-Modified": "Thu, 06 Jun 2013 14:01:52 GMT", "ETag": "\"765fc03186b121a764133349f8b716df\"", "X-Robots-Tag": "noindex, follow", "Link": "; rel=shortlink", "X-CACHE-URI": "null cache" } } }, { "id": "616ca6d7-6e57-4c10-8b57-f6f3dabc0930", "uuid": "616ca6d7-6e57-4c10-8b57-f6f3dabc0930", "request": { "method": "ANY" }, "response": { "status": 200, "proxyBaseUrl": "http://www.example.com" }, "priority": 10 } ] } } 

URL的唯一清晰记录是在针对proxyBaseUrl的最终条目中,并且鉴于我必须在控制台调用中指定URL,我现在担心如果我针对不同的域进行记录,则每个域的域将是丢失。

这意味着在播放模式下,WireMock只能从一个域播放,我必须重新启动它并将其指向另一个缓存才能播放不同的站点。 这对我的用例来说不可行,所以有没有解决这个问题的方法呢?

(我已经与Mountebank做了一些工作,并且愿意转向它,虽然我发现WireMock通常更容易使用。我对Mountebank的有限理解是它遭受同样的单域问题,尽管我很高兴我很乐意更换任何强大的开源API驱动的记录器HTTP代理,如果删除WireMock是唯一的方法)。

通过在请求中添加Host头标准,可以为多个域提供WireMock存根。 假设您的DNS /主机文件将所有相关域映射到您的WireMock服务器的IP,那么这将使其在普通Web服务器上表现得像虚拟主机。

主要问题是录像机不会将主机标头添加到您的映射中,因此您需要在此之后自己执行此操作,或者在操作系统中执行此操作。

我一直在考虑为此添加更好的支持,所以请留意这个空间。

我还建议查看Hoverfly,它似乎已经很好地解决了这个问题。