HttpClient vs HtmlUnit

时间:2017-03-24 06:50:41

标签: java httpclient htmlunit

我知道HtmlUnit会模拟浏览器,而HttpClient则不会。

HtmlUnit中,当加载页面并且内部有JavaScript时,脚本会被执行吗?如果脚本设置了cookie,cookie是否会在HtmlUnit的浏览器中设置并可从Java代码访问?

是否可以使用HttpClient完成任务,但不能使用HtmlUnit?在HtmlUnit中,我们可以从POST请求开始并修改HTTP请求的任何部分,包括方法,URI,HTTP版本,标题和正文吗?

HttpClient优于HtmlUnit的优势是什么?

1 个答案:

答案 0 :(得分:5)

HttpClient是较低级别的库,用于发送HTTP请求和检索响应。

HtmlUnit处于更高级别,内部使用HttpClient发出HTTP请求,但也处理JavaScript(通过Rhino和内部DOM实现),XPath(通过{{1 }},CSS(通过Xalan),格式错误的HTML(通过CSSParser),WebSockets(通过NekoHtml)等。

您可以通过以下内容修改Jetty中的传出请求和响应:

HtmlUnit

暗示here

您可以通过覆盖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; } }; 更改HttpClient中使用的HtmlUnit

您可以通过以下方式提出HttpWebConnection.createHttpClient()请求:

POST