通过 BrowserMobProxy 和 Selenium 重写 HAR 内容
Rewrite HAR content via BrowserMobProxy and Selenium
是否可以更改来自 https 站点的 har(其中包含 json)响应?我通过 getText()
看到初始 json,然后使用 setText()
,并通过 setSize
和 setBodySize
更改其大小。内容已更改,如我在调试中看到的那样。但似乎没有效果,chrome 收到相同的旧 json。有办法吗?
public static class ResponseModifier implements ResponseInterceptor {
@Override
public void process(BrowserMobHttpResponse response, Har har) {
String contentType = response.getHeader("Content-Type");
if (contentType!=null && contentType.startsWith("application/json")){
response.getEntry().getResponse().getContent().setText(respond);
response.getEntry().getResponse().getContent().setSize(respond.length());
response.getEntry().getResponse().setBodySize(respond.length());
response.getRawResponse().removeHeaders("Content-Length");
response.getRawResponse().addHeader("Content-Length", ""+respond.length());
}
}
我想也许重点是 response.getRawResponse().getEntity().getContentLength()
不知何故具有旧值,但我无法重写它。还是原因不同?
事实证明比我想象的要容易得多。
我必须使用 BMP 的 core-littleproxy 版本,BrowserMobProxy class 并创建 BrowserMobProxyServer 的实例。我只使用过滤器:
proxy.addResponseFilter((response, contents, messageInfo) -> {
if ((contents.getContentType().startsWith("application/json"))) {
contents.setTextContents(respond);
}
});
感谢阅读:)
是否可以更改来自 https 站点的 har(其中包含 json)响应?我通过 getText()
看到初始 json,然后使用 setText()
,并通过 setSize
和 setBodySize
更改其大小。内容已更改,如我在调试中看到的那样。但似乎没有效果,chrome 收到相同的旧 json。有办法吗?
public static class ResponseModifier implements ResponseInterceptor {
@Override
public void process(BrowserMobHttpResponse response, Har har) {
String contentType = response.getHeader("Content-Type");
if (contentType!=null && contentType.startsWith("application/json")){
response.getEntry().getResponse().getContent().setText(respond);
response.getEntry().getResponse().getContent().setSize(respond.length());
response.getEntry().getResponse().setBodySize(respond.length());
response.getRawResponse().removeHeaders("Content-Length");
response.getRawResponse().addHeader("Content-Length", ""+respond.length());
}
}
我想也许重点是 response.getRawResponse().getEntity().getContentLength()
不知何故具有旧值,但我无法重写它。还是原因不同?
事实证明比我想象的要容易得多。 我必须使用 BMP 的 core-littleproxy 版本,BrowserMobProxy class 并创建 BrowserMobProxyServer 的实例。我只使用过滤器:
proxy.addResponseFilter((response, contents, messageInfo) -> {
if ((contents.getContentType().startsWith("application/json"))) {
contents.setTextContents(respond);
}
});
感谢阅读:)