java - 使用 HtmlUnit 下载 xhr 时缺少附件

标签 java download xmlhttprequest htmlunit

我正在尝试从基于 liferay+struts+Angular 的网站自动下载一些文件(使用 HtmlUnit)。 到目前为止,HtmlUnit 在页面导航和解释 JS 方面做得很好,但是当我尝试下载文件时,它返回的是同一页面,而不是附件。

下载按钮是这样制作的:

<button class="btn" name="filedownload" data-ng-disabled="false"
        type="button" data-ng-lick="vm.downloadFile(...things...)">
</button>

我已经尝试过在网上找到的两种主要技术:使用 CollectingAttachmentHandler.getWebResponse().getContentAsStream(),两者均适用给我起始页而不是附件。

通过使用 Chrome 的网络跟踪器跟踪它,我发现一旦我单击它,它就会调用 2 个不同的端点,第一个端点跟踪此类文件将被加载,第二个端点下载文件,第二个端点有一个使用正确的 Content-Disposition:附件进行响应; filename= header ,但显然 HtmlUnit 没有拾取它。

这是我尝试过的一些代码片段。

CollectingAttachmentHandler attachmentHandler = new 
CollectingAttachmentHandler();
client.setAttachmentHandler(attachmentHandler);
attachmentHandler.handleAttachment(myButton.click());

// I get only one attachment, the page
List<Attachment> attachments = attachmentHandler.getCollectedAttachments();
try (InputStream in = myButton.click().getWebResponse().getContentAsStream();
     OutputStream out = Files.newOutputStream(new File(""...my_file...).toPath())) {
    IOUtils.copy(in, out);
}
// In my file I find the page

编辑: 我在HtmlUnit的github上开了一张票,作者很慷慨地回复了我,并给了我一些建议,比如检查是否使用client.getWebWindows()打开了新窗口。不幸的是,这不是我的情况,但我也将其发布在这里,以防有人发现它有帮助。

最佳答案

至少您可以使用 WebConnectionWrapper 来拦截/获取所有请求响应周期的通知。 请参阅http://htmlunit.sourceforge.net/faq.html#HowToModifyRequestOrResponse一个简短的示例。

关于java - 使用 HtmlUnit 下载 xhr 时缺少附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514934/

相关文章:

html - 在已实现 FormData 和 XmlHttpRequest 的现代浏览器中是否存在缓冲区(大小或文件数量)限制?

java - 如何将捕获的图像从自定义相机传递到另一个 Activity ?

java - Angularjs Java Rest服务415不支持的媒体类型

http - 为什么要使用下载队列?

javascript - JavaScript 可以设置哪些 HTTP header ?

JavaScript 对象 (JSON) 到 URL 字符串格式

java - 防止 Controller 响应

java - 从 Java Set 中获取 *any* 值的好方法?

python - 下载多个文本文件并将它们分开?

csv - 如何在 Racket 中下载和解析 csv 文件?