2017-03-24 3 views
2

私はHtmlUnitがブラウザをシミュレートしていることを知っていますが、HttpClientはありません。HttpClient vs HtmlUnit

HtmlUnitでは、ページが読み込まれ、JavaScriptが内部にある場合、スクリプトは実行されますか?スクリプトがクッキーを設定すると、クッキーはHtmlUnitのブラウザに設定され、Javaコードからアクセスできますか?

HttpClientを使用して実行できるものはありますか?HtmlUnitを使用していないものはありますか? HtmlUnitでは、POSTリクエストから開始し、メソッド、URI、HTTPバージョン、ヘッダー、本文を含むHTTPリクエストの一部を変更できますか?

HttpClientの利点はHtmlUnit以上ですか?

答えて

4

HttpClientは、HTTP要求を送信して応答を取得するライブラリです。

HtmlUnitは、より高いレベルであり、内部的にHTTPリクエストを行うためにHttpClientを使用していますが、またNekoHtmlを通じてのJavaScript(CSSParserを介して)(Rhinoと内部DOM実装を介して)、XPathの(Xalanを介して)、CSS、不正なHTMLを(ハンドルなどJetty経由)、WebSocketを()、

次のようなもので HtmlUnitで発信要求と応答を変更することができ

new WebConnectionWrapper(webClient) { 

    public WebResponse getResponse(WebRequest request) throws IOException { 
     WebResponse response = super.getResponse(request); 
     if (request.getUrl().toExternalForm().contains("my_url")) { 
      String content = response.getContentAsString("UTF-8"); 

      //change content 

      WebResponseData data = new WebResponseData(content.getBytes("UTF-8"), 
        response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders()); 
      response = new WebResponse(data, request, response.getLoadTime()); 
     } 
     return response; 
    } 
}; 

sはhereを示唆しています。

HttpClientHtmlUnitに変更すると、HttpWebConnection.createHttpClient()を上書きすることができます。クールな例で

WebRequest webRequest = new WebRequest(url, HttpMethod.POST); 
HtmlPage page = webClient.getPage(webRequest); 
+1

良い答え:

次の方法でPOST要求を行うことができます。 – vanloc