2016-04-05 2 views
0

私はSeleniumテストスイート内でBrowserMob-Proxyを使用しています。いくつかのテストでRefererを変更したいと思います。私は2.0のドキュメントからrequestInterceptorをMyProxyクラスに追加しましたが、エラーを生成しない間はRefererは変更されません。RequestInterceptorを追加してBrowserMob-Proxy 2.0でRefererを変更する方法

今のところ、私はプロキシが作成されたMyProxyクラスで動作するようにrequestInterceptorを取得しようとしています。最後に、各テストで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

には影響しませんしません。プロキシ2.1.0ベータ5私は私が解決することはできません紛争を取得しています。 littleProxyライブラリのみを使用できますか? – analyticsPierce

+0

私はOKと同じコードを実行しているので、不要なアップグレードは必要ありません。 'process()'が呼び出されていることを確認しましたか?その場合、リクエストオブジェクトをログすることができます(getMethod()の結果は、addの後にその状態をチェックするために、実際にはHttpClientオブジェクトです)。構文は正常に見えます。最後に、どのように/あなたをチェックしているのですかReferer:それは問題でしょうか? –

+0

また、複数のRefererヘッダーが意味をなさないと考えるので、remove/addを単に 'set'に置き換えることもできます。 –

答えて

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のベータ5の両方ですべて指定されたヘッダを追加します。 Firefox(45)、Chrome(49)、PhantomJSの各バージョンでこれを確認しました。

enter image description here

だから、要するに:

  • OPのヘッダ付加構文は完全に罰金です。
  • setHeaderも期待どおりに動作します。
  • BMPのバージョン番号は、この影響を与える(しかし、それが解放されたときに/として是非とも2.1へのアップグレード)私はBrowserMob-にアップグレードすることはできないですのでご注意ください
  • ブラウザがこの
+0

ご協力ありがとうございます@AndrewRegan! – analyticsPierce

0

このissueを確認し、問題が説明されているかどうかを確認してください。

2.1.0-beta-5のBrowserMobProxyの最新バージョンに移行することをお勧めします。

+0

類似しているようです。私は2.1.0がはるかに優れていることに同意します。私は上記のように、それは私の企業ネットワークの内部で動作しません。 – analyticsPierce

+0

2.0に問題がありました。 BrowserMobProxyの開発者は、人々がバージョン2.1.0-beta-5に移行することを推奨しています。以前の2.1でも問題がありました。私は、あなたがこれを持つ力と議論することをお勧めします。 – MikeJRamsey56

+0

BMPはOPのコードとほとんど同じ専用のテストをしています.2.0ベータ版では事実上同一のコードを持っていますので、バージョンが使用不能(デバッグ不可能)であり、更新する必要があると言うのは時期尚早です。 –

関連する問題