2016-02-12 64 views
0

是否可以通過https站點更改har(使用json)響應?我看到getText()的初始json,然後使用setText(),並將其大小更改爲setSizesetBodySize。內容如我在調試中看到的那樣改變。但是,似乎沒有效果,Chrome會收到相同的舊json。有沒有辦法?通過BrowserMobProxy和Selen重寫HAR內容

public static class ResponseModifier implements ResponseInterceptor { 

    @Override 
    public void process(BrowserMobHttpResponse response, Har har) { 

     String contentType = response.getHeader("Content-Type"); 

     if (contentType!=null && contentType.startsWith("application/json")){ 
      response.getEntry().getResponse().getContent().setText(respond); 
      response.getEntry().getResponse().getContent().setSize(respond.length()); 
      response.getEntry().getResponse().setBodySize(respond.length()); 
      response.getRawResponse().removeHeaders("Content-Length"); 
      response.getRawResponse().addHeader("Content-Length", ""+respond.length()); 
     } 
    } 

我想也許問題是,response.getRawResponse().getEntity().getContentLength()不知何故有舊的價值,但我不能重寫。或者是原因不同?

+0

你不重寫HAR,而是一個HTTP響應。 HAR是請求+響應的JSON描述的導出歸檔。我有點困惑,爲什麼你會通過HTTP請求一個(然後試圖擺弄響應),而不是通過代理服務器以編程方式。 –

+0

我需要用json改變http響應,所以我認爲har就是這樣。我如何以其他方式更改回復內容? –

+0

'ResponseInterceptor'是正確的方式,但我認爲這個術語很混亂 - API也似乎不穩定。等等,這是你嗎? https://github.com/lightbody/browsermob-proxy/issues/382 –

回答

0

結果比我想象的要容易得多。 我必須使用BMP的核心littleproxy版本,BrowserMobProxy類並創建BrowserMobProxyServer的一個實例。在我剛用過濾:

proxy.addResponseFilter((response, contents, messageInfo) -> { 
     if ((contents.getContentType().startsWith("application/json"))) { 
      contents.setTextContents(respond); 
     } 
    }); 

感謝您的閱讀:)