javascript - 在 HtmlUnit 中获取脚本通信响应
问题描述
我想在动态网络中实现数据。观察 Chrome 开发工具,我看到网络发出连续的 URL 获取请求以获取 json 数据,或者它使用 websockets 获取它们。
我试图获取 Web 获得的所有响应以实现其数据或 WebSocket 接收到的消息,但使用我的代码我只能获取 Web 的 URL 请求的响应。
有可能用 HtmlUnit 做我需要的东西吗?
/* turn off annoying htmlunit warnings */
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
WebClient client = new WebClient(BrowserVersion.CHROME);
client.getOptions().setCssEnabled(false);
client.getOptions().setJavaScriptEnabled(true);
client.getOptions().setThrowExceptionOnScriptError(false);
HtmlPage page = client.getPage("https://mobile.bet365.com/Default.aspx?lng=3");
client.waitForBackgroundJavaScript(10000);
List<NameValuePair> response =page.getWebResponse().getResponseHeaders();
for (NameValuePair header : response) {
System.out.println(header.getName() + " = " + header.getValue());
}
System.out.println(page.asText());
client.close();
}
解决方案
我在 HtmlUnit 文档中找到了获取 Html 响应的解决方案。我把代码留在这里,可以对请求进行相同的处理:
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();
//change content
WebResponseData data = new WebResponseData(content.getBytes(),
response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());
response = new WebResponse(data, request, response.getLoadTime());
}
return response;
}
};
推荐阅读
- xml - 将 XML 复制到新目录,创建副本,然后根据内部内容重命名重复文件
- c - 如何将 ISO8601 解析为 time_t?
- javascript - 在 MVC 项目中使用 JavaScript 调用控制器函数
- php - 从ini文件中删除特定值
- java - 使用 Allure 报告在 Java&TestNG 中生成屏幕截图
- flutter - 在颤振中更新android studio后出错
- elasticsearch - 按字段聚合,然后对另一个字段的值求和
- ios - 在 Xcode 10 中设计 viewcontroller 后如何添加导航控制器?
- ios - 带有 MSAL 的本机 iOS 应用程序需要第二次登录 Webview 才能到 Sharepoint Online
- android - 如何在新活动中获取通知的标题和消息并在文本视图上显示