如何在BrowserMob-Proxy 2.0中添加RequestInterceptor并更改Referer

时间:2016-04-05 22:37:18

标签: selenium browsermob-proxy

我在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;
    }
}

2 个答案:

答案 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中的每个版本确认了这一点。

enter image description here

简而言之:

  • OP的标题添加语法非常好。
  • setHeader也按预期工作。
  • BMP版本号不会对此产生影响(但无论如何都会升级到2.1)/
  • 浏览器不会影响此

答案 1 :(得分:0)

查看此issue,看看它是否描述了您的问题。

建议转到最新版本的BrowserMobProxy,即2.1.0-beta-5。