【发布时间】:2016-04-05 22:37:18
【问题描述】:
我在 Selenium 测试套件中使用 BrowserMob-Proxy。我想更改Referer进行一些测试。我已将 2.0 文档中的 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;
}
}
【问题讨论】:
-
请注意,我无法升级到 BrowserMob-Proxy 2.1.0 beta 5,因为我遇到了无法解决的冲突。我可以只使用 littleProxy 库吗?
-
我有很多相同的代码运行正常,因此无需进行任何不必要的升级。你确认
process()被调用了吗?如果是这样,您可以在添加后记录请求对象(getMethod() 的结果实际上是一个 HttpClient obj,而不是 Browsermob 对象)以检查其状态。语法看起来不错。最后,您如何/在哪里检查Referer:这可能是问题吗? -
你也可以用简单的'set'替换remove/add,因为我认为多个Referer头没有任何意义。
-
@AndrewRegan 是的,
process()正在被调用。但是,请求对象(在addHeader()或setHeader()之后)显示的是 localhost Referer,而不是我指定的 google.com Referer。 -
@AndrewRegan 在测试运行时,我正在 Chrome 开发工具中检查请求中的引用者,并按照您的建议检查请求对象。