我知道HtmlUnit
会模拟浏览器,而HttpClient
则不会。
在HtmlUnit
中,当加载页面并且内部有JavaScript时,脚本会被执行吗?如果脚本设置了cookie,cookie是否会在HtmlUnit
的浏览器中设置并可从Java代码访问?
是否可以使用HttpClient
完成任务,但不能使用HtmlUnit
?在HtmlUnit
中,我们可以从POST请求开始并修改HTTP请求的任何部分,包括方法,URI,HTTP版本,标题和正文吗?
HttpClient
优于HtmlUnit
的优势是什么?
答案 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