2015-05-15 4 views
0

Я пишу тест автоматизации и фиксирую сетевой вызов, сделанный в фоновом режиме, я использую browserermob-прокси.Как добавить пользовательские файлы cookie в прокси-сервер браузера на java

В browserermob-proxy я хочу установить cookie перед запросом. Как мне это сделать?

Ниже мой код: -

String strFilePath = "data.har"; 

     // start the proxy 
     ProxyServer server = new ProxyServer(4444); 
     server.start(); 

     server.setCaptureHeaders(true); 
     server.setCaptureContent(true); 

     // get the Selenium proxy object 
     Proxy proxy = server.seleniumProxy(); 

     FirefoxProfile profile = new FirefoxProfile(); 
     String userAgent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 MobileWeb/8H7 Safari/6533.18.5"; 
     profile.setPreference("general.useragent.override", userAgent); 

     // configure it as a desired capability 
     DesiredCapabilities capabilities = DesiredCapabilities.firefox(); 
     capabilities.setCapability(CapabilityType.PROXY, proxy); 
     capabilities.setCapability(FirefoxDriver.PROFILE, profile); 

     // start the browser up 
     WebDriver driver = new FirefoxDriver(capabilities); 

     final String[] remoteHost = {null}; 
     final String[] analytics = {null}; 
     final String[] fetchAdjs = {null}; 


     server.addRequestInterceptor(new RequestInterceptor() 
     { 
      int googleCount = 0; 
      int adjs = 0; 

      @Override 
      public void process(BrowserMobHttpRequest browserMobHttpRequest, Har har) 
      { 
       remoteHost[0] = browserMobHttpRequest.getProxyRequest().getRemoteHost(); 

       String request = browserMobHttpRequest.getProxyRequest().getRequestURL().toString(); 

       if (request.matches(".*google.*")) 
        googleCount = googleCount + 1; 

       if (request.matches(".*test.*")) 
        adjs = adjs + 1; 

       analytics[0] = String.valueOf(googleCount); 
       fetchAdjs[0] = String.valueOf(adjs); 

       // System.out.println(browserMobHttpRequest.getMethod().getAllHeaders()[1]); // user agent 

       System.out.println(browserMobHttpRequest.getProxyRequest()); 
      } 
     }); 

     // create a new HAR with the label "apple.com" 
     server.newHar("assertselenium.com"); 

     // open yahoo.com 
     driver.get("http://test.com"); 

     Thread.sleep(3000); 
     Thread.sleep(3000); 

     driver.get("http://test.com/316782/content/fDxL4zzv"); 
     Thread.sleep(3000); 

     // get the HAR data 
     Har har = server.getHar(); 

     FileOutputStream fos = new FileOutputStream(strFilePath); 

     // view har file here --> http://pcapperf.appspot.com/ 
     har.writeTo(fos); 
     server.stop(); 
     driver.quit(); 
+0

Создать профиль браузера может быть, - Смотрите этот ответ - http://stackoverflow.com/a/29396531/4720017 , Добавление параметра 'user-dir' будет использовать профиль браузера. – LittlePanda

ответ

1

Использование запроса фильтра является правильным подходом. Тем не менее, я бы настоятельно рекомендовал создать последнюю версию прокси-сервера BrowserMob с интеграцией LittleProxy. Его фильтры намного надежнее и проще в использовании. См. github page для получения информации о создании и использовании последней версии. Раздел LittleProxy interceptors будет особенно важен.

Вот простой пример добавления куки для каждого запроса с использованием новых запросов фильтров:

BrowserMobProxy proxy = new BrowserMobProxyServer(); 
    proxy.start(); 

    proxy.addRequestFilter(new RequestFilter() { 
     @Override 
     public HttpResponse filterRequest(HttpRequest request, HttpMessageContents contents, HttpRequest originalRequest) { 
      request.headers().add("Cookie", "added-cookie=added-value"); 

      return null; 
     } 
    }); 
+0

Привет, я просто хочу спросить. Почему он возвращает null? Это повлияет на результат HttpResponse? –

+0

@AldoSuwandi: Возвращение null просто означает «Продолжайте регулярную обработку, я не хочу возвращать ответ короткого замыкания». Это не повлияет на реакцию сервера. –