我的问题是:
当使用元素<input type="submit" name="method" value="Save">
提交表单时,这会打开一个dialoge open-save pdf文件。
使用HtmlUnit(版本2.8)我无法下载文件,因为响应返回了下一个html页面的内容而不是pdf文件。
我的Web客户端的配置如下:
private WebClient getWebClient() {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setRedirectEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getCookieManager().setCookiesEnabled(true);
webClient.waitForBackgroundJavaScript(4000);
return webClient;
}
然后,用于提交表单的代码是:
List<HtmlElement> elements = (List<HtmlElement>) page.getByXPath("//input[@type='submit' and @value='Save']");
HtmlElement buttonDownload = elements.get(0);
最后,用于下载pdf文件的方法是:
public static void downloadByClickOnButton(HtmlElement buttonDownload) throws Exception {
HtmlPage page = buttonDownload.click();
WebResponse response = page.getWebResponse();
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = response.getContentAsStream();
outputStream = new FileOutputStream(new File("/path/to/save/file/test_file.pdf"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
System.out.println("Done!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
代码有效,但保存的文件是页面的html文本,而不是pdf文件。
有什么问题?使用htmlunit可以与open-save dialoge进行交互吗?请帮帮我!! : - )
这是表格:
<form name="ViewDocumentsFB" method="post" action="/Document/ViewDocument.do">
<input type="hidden" name="idRequestDocument" value="923390829">
<tr>
<td><input type="submit" name="metodo" value="Open"></td>
<td><input type="submit" name="metodo" value="Save"></td>
</tr>
如果我手动发送此请求: http://----------/Document/ViewDocument.do 它没有打开一个open-save dialoge并重定向到其他页面,为什么?
感谢提前。