gpt4 book ai didi

java - Wiremock 代理记录功能 - 它可以替代响应中的 Host 或 IP 吗?

转载 作者:行者123 更新时间:2023-11-30 02:03:46 24 4
gpt4 key购买 nike

我正在使用wiremock记录rest api...以我的SharePoint为例。

所以我设置了一个录音机:

java -jarwiremock-standalone-2.18.0.jar

现在我转到http://localhost:8080/__admin/recorder/我为我的 http://sharepointhost 启用录音。

现在我通过 http://localhost:8080 向 sharepoint Rest api 发出一些请求。

但其余 api 响应仍然引用 http://sharepointhost

有没有办法打开某种反向代理或 URL 模式字符串替换,以便我可以避免此问题?就我而言,有什么方法可以做到这一点?我是否需要使用 Java 版本的记录器而不是使用独立的记录器?

最佳答案

WireMock 支持“扩展”。还有一些预先打包的扩展类型,称为“Transformers”。

有一种扩展类型允许您拦截 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";
}
}

关于java - Wiremock 代理记录功能 - 它可以替代响应中的 Host 或 IP 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51960907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com