HtmlUnit HtmlFileInput.setData() 不工作

HtmlUnit HtmlFileInput.setData() not working

我正在尝试使用 HtmlUnit HtmlFileInput class 将文件上传到网站。我有一个 byte[] 数组中的数据,我想发送它而不先将它写入文件。

我正在尝试:

    HtmlFileInput fileInput = form.getInputByName("file");
    fileInput.setData(data);
    HtmlElement button = form.getInputByName("validate");
    HtmlPage responsePage = button.click();

这是行不通的。但是,当我尝试

    HtmlFileInput fileInput = form.getInputByName("file");
    fileInput.setValueAttribute("file.txt");
    HtmlElement button = form.getInputByName("validate");
    HtmlPage responsePage = button.click();

一切正常。文档似乎表明 setData() 做的正是我想做的,但似乎没有任何 HtmlUnit 代码甚至使用调用 setData() 时设置的 data_ 变量。该代码使用调用 setValueAttribute() 时设置的 files_ 字段。

我注意到打开的几个旧错误都谈到了类似的问题,并且说它们都已修复。

我是否试图以不应该使用的方式使用 setData()

谢谢。

简而言之 - data_ 由 getSubmitNameValuePairs() 使用,并且还有针对它的单元测试(例如 com.gargoylesoftware.htmlunit.html.HtmlFileInput2Test.setValueAttributeAndSetDataDummyFile())。

这里的技巧是缺少文件的其余部分 - 如果您想上传您的东西,您必须模拟更多。请设置值(以提交虚拟文件名)和内容类型,以帮助服务器理解您的数据。

HtmlFileInput fileInput = form.getInputByName("file");
fileInput.setValueAttribute("dummy.txt");
fileInput.setContentType("text/csv");
fileInput.setData("My file data".getBytes());

我想我必须为此改进一下文档。

如果你愿意,我们可以讨论这个问题,或者如果你想看到一个快速修复 - 只需在 github.

上打开一个问题