我在Selenium测试套件中使用BrowserMob-Proxy。我想更改Referer进行一些测试。我已经将2.0 docs中的requestInterceptor添加到我们的MyProxy类中,虽然它没有生成错误,但Referer没有被更改。
目前,我正在尝试让requestInterceptor在创建代理的MyProxy类中工作。最后,我希望能够在每次测试中指定Referer。
如果有人建议让requestInterceptor工作,请告诉我。这是MyProxy类。如果其他代码示例有助于解决此问题,请与我们联系。
import org.openqa.selenium.Proxy;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.ProxyServer;
import net.lightbody.bmp.proxy.http.BrowserMobHttpRequest;
import net.lightbody.bmp.proxy.http.RequestInterceptor;
public class MyProxy {
private ProxyServer proxy;
private boolean initialized;
public Har endCapture() throws Exception {
Thread.sleep(15000);
return this.proxy.getHar();
}
public Proxy getSeleniumProxy() {
return this.proxy.seleniumProxy();
}
public boolean isInitialized() throws Exception {
return this.initialized;
}
public void start() throws Exception {
int proxyPort = Integer.parseInt(System.getProperty("proxyPort"));
this.proxy = new ProxyServer(proxyPort);
this.proxy.start();
this.proxy.setCaptureHeaders(true);
this.proxy.setCaptureContent(true);
this.proxy.addRequestInterceptor(new RequestInterceptor() {
@Override
public void process(BrowserMobHttpRequest request, Har har) {
request.getMethod().removeHeaders("Referer");
request.getMethod().addHeader("Referer", "http://www.google.com");
}
});
this.initialized = true;
}
public void startCapture() throws Exception{
this.proxy.newHar("MyHar");
}
public void stop() throws Exception {
this.proxy.stop();
this.initialized = false;
}
}
答案 0 :(得分:1)
我认为这里的关键是如何测试新添加的标题,手动操作很棘手。
我选择作为测试站点:http://headers.cloxy.net/request.php,它只记录所有请求标头的名称和值。首先设置了我的代理,我在页面请求完成后安排了一个截图。
我能够确定:
@Override
public void process(BrowserMobHttpRequest req, Har har) {
req.getMethod().removeHeaders("Referer");
req.getMethod().addHeader("Referer", "http://www.google.xyz");
// Some extras
req.getMethod().addHeader("Foo_" + System.currentTimeMillis(), "Bar_" + new java.util.Date());
req.getMethod().setHeader("Lorem_" + System.currentTimeMillis(), "Ipsum_" + new java.util.Date());
}
...在BrowserMob 2.0.0和2.1 beta 5 中成功添加所有指定的标头。我已经为Firefox(45),Chrome(49)和PhantomJS中的每个版本确认了这一点。
简而言之:
setHeader
也按预期工作。答案 1 :(得分:0)
查看此issue,看看它是否描述了您的问题。
建议转到最新版本的BrowserMobProxy,即2.1.0-beta-5。