我正在使用Wiremock记录剩余api ...以我的SharePoint为例。
所以我设置了一个录音机:
java -jar wiremock-standalone-2.18.0.jar
现在,我转到http://localhost:8080/__admin/recorder/,并为我的http://sharepointhost启用录音。
现在,我通过http://localhost:8080提出了一些共享Rest API的请求。
但是其余的api响应仍引用http://sharepointhost。
是否有一种方法可以打开某种反向代理或URL模式字符串替换,从而可以避免此问题?在我的情况下,该怎么做?我需要使用记录器的Java品种而不是独立的吗?
答案 0 :(得分:2)
WireMock支持“扩展”。并且有一些预打包的扩展类型,称为“变形金刚”。
有一个扩展类型,允许您截获http请求的响应。然后,您可以在此处替换响应的内容。
请参见http://wiremock.org/docs/extending-wiremock/
我创建了一个带有响应正文URL重写扩展名的GitHub存储库:
https://github.com/nddipiazza/wiremock-response-body-url-rewriter
public class ResponseBodyUrlRewriteTransformer extends ResponseTransformer {
final int wiremockPort;
final String wiremockBindAddress;
final private List<String> urlsToReplace;
public ResponseBodyUrlRewriteTransformer(String wiremockBindAddress, int wiremockPort, List<String> urlsToReplace) {
this.urlsToReplace = urlsToReplace;
this.wiremockBindAddress = wiremockBindAddress;
this.wiremockPort = wiremockPort;
}
private String replaceUrlsInBody(String bodyText) {
for (String urlToReplace : urlsToReplace) {
bodyText = bodyText.replaceAll(Pattern.quote(urlToReplace),
"http://" + wiremockBindAddress + ":" + wiremockPort);
}
return bodyText;
}
@Override
public Response transform(Request request, Response response, FileSource files, Parameters parameters) {
if (response.getStatus() == 200) {
ContentTypeHeader contentTypeHeader = response.getHeaders().getContentTypeHeader();
if (contentTypeHeader != null && contentTypeHeader.mimeTypePart().contains("xml")) {
return Response.response()
.body(replaceUrlsInBody(response.getBodyAsString()))
.headers(response.getHeaders())
.status(response.getStatus())
.statusMessage(response.getStatusMessage())
.fault(response.getFault())
.chunkedDribbleDelay(response.getChunkedDribbleDelay())
.fromProxy(response.isFromProxy())
.build();
}
}
return response;
}
@Override
public String getName() {
return "ResponseBodyUrlRewriteTransformer";
}
}
答案 1 :(得分:0)
是的。您可以将WireMock作为具有自动记录模式的代理启动。您需要的命令是这样的:
java -jar wiremock-standalone-2.18.0.jar --port 8787 --print-all-network-traffic --verbose --enable-browser-proxying --record-mappings
其中的重要参数有启用浏览器代理和记录映射
代理在端口8787上运行,您必须将浏览器配置为使用代理localhost:8787
现在您可以浏览任何网站,所有流量都会被记录。