0

Selenium テスト スイート内で BrowserMob-Proxy を使用しています。いくつかのテストのためにリファラーを変更したいと思います。2.0 ドキュメントの requestInterceptor を MyProxy クラスに追加しましたが、エラーは発生しませんが、Referer は変更されません。

今のところ、プロキシが作成される MyProxy クラスで requestInterceptor を機能させようとしています。最後に、各テストでリファラーを指定できるようにしたいと考えています。

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;
    }
}
4

2 に答える 2

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の各バージョンで確認済みです。

ここに画像の説明を入力

つまり、要するに:

  • OP のヘッダー追加構文はまったく問題ありません。
  • setHeader期待どおりに動作します。
  • BMP のバージョン番号はこれに影響しません (ただし、リリースされたら必ず 2.1 にアップグレードしてください)。
  • ブラウザはこれに影響しません
于 2016-04-08T23:23:34.243 に答える