Java HtmlUnit でコンテンツをフィルタする

HtmlUnit を簡易ブラウザエミュレータとして使う。
取得した Web ページを一部分書き換えたい。
Proxomitron などのプロキシサーバーを介して、フィルタリングするのもよい。
DOM の範囲で変更できる箇所なら、Document.Write でもよい。

JavaScript で URL を生成して、アクセスするものもある。
URL をアクセスするときにフィルタリングしたい。

import java.net.URL;
import java.io.IOException;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.WebResponse;
import com.gargoylesoftware.htmlunit.util.FalsifyingWebConnection;

public class test {

    public static void main(String[] args) throws Exception {

        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);

        new FalsifyingWebConnection(webClient) {

            @Override
            public WebResponse getResponse(WebRequest request) throws IOException {

                WebResponse response;
                if ( request.getUrl().toString().contains("hoge.js") ) {
                    // 空のコンテンツを返す
                    response = createWebResponse(request, "", "application/javascript", 200, "OK");
                } else {
                    response = super.getResponse(request);
                }
                
                return response;
            }
        };

        HtmlPage page = (HtmlPage)webClient.getPage(new URL("http://www.hoge.com"));
        System.out.print(page.asText());
    }
}

取得したコンテンツを HtmlUnit 内で書き換える。

        new FalsifyingWebConnection(webClient) {

            @Override
            public WebResponse getResponse(WebRequest request) throws IOException {

                WebResponse response = super.getResponse(request);
                String content = response.getContentAsString();
                content = content.replaceAll("var i=12345", "var i=0");
                response = replaceContent(response, content);
                
                return response;
            }
        };