Захватить содержимое текущей страницы в веб-java
Я хочу захватить текущую страницу и отправить ее в приложение, которое преобразует ее в PDF.
Это то, что я использую:
FacesContext facesContext=FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)
facesContext.getExternalContext().getResponse();
HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
// RequestPrinter.debugString();
response.reset();
// download a pdf file
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment;filename="+new Date().toString()+".pdf");
prince.setVerbose(true);
prince.setLog(logFile);
try{
//getPath() to the page the user is currently on
URL pagePath=new URL(this.getPath());
URLConnection urlConnection = pagePath.openConnection();
urlConnection.setDoOutput(true);
int length = urlConnection.getContentLength();
//Lets use inputStream
BufferedInputStream bis=new BufferedInputStream(urlConnection.getInputStream());
response.setContentLength(length);
//this.getPageUsingJSoup().data().getBytes();
//call prince and pass params for inputstream outputStream
prince.convert(bis,response.getOutputStream());
urlConnection.getInputStream().close();
}catch(MalformedURLException mu){
mu.printStackTrace();
}
catch(IOException ioe){
ioe.printStackTrace();
}
facesContext.responseComplete();
Поскольку веб-сайт требует аутентификации, сгенерированный PDF-файл является страницей с ошибкой регистрации.
Есть ли способ захвата контента страницы, который использует сеанс текущего пользователя?
Заранее спасибо.
4 ответа
Просто запросите страницу в том же сеансе HTTP, что и текущий запрос. Если ваше веб-приложение поддерживает перезапись URL (как по умолчанию), просто добавьте идентификатор сеанса как jsessionid
фрагмент пути:
String sessionId = ((HttpSession) externalContext.getSession()).getId();
InputStream input = new URL("http://localhost:8080/context/page.jsf;jsessionid=" + sessionId).openStream();
// ...
Или, если ваше веб-приложение не поддерживает перезапись URL-адресов, но принимает только файлы cookie, установите его в качестве файла cookie запроса обычным способом:
URLConnection connection = new URL("http://localhost:8080/context/page.jsf").openConnection();
connection.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
InputStream input = connection.getInputStream();
// ...
Обратите внимание, что я удалил setDoOutput()
так как вы, кажется, не заинтересованы в выполнении запроса POST.
Да, конечно, есть. Вы отправляете этот контент, поэтому он у вас есть. Вы должны хранить объект содержимого. Если у вас его нет, проверьте ваши байтовые потоки. Содержание должно быть там;)
Есть несколько веб-сайтов, которые позволяют конвертировать всю страницу в PDF и сохранить его в формате.pdf. Попробуйте сайт http://pdfcrowd.com/ Надеюсь, это поможет вам.
Я не знаю, как захватить содержимое страницы, используя сеанс текущего пользователя, но я могу предложить другой способ сделать это - вы можете переместить логику преобразования pdf в тест-кейс Selenium и использовать тест-кейс для навигации и входа в систему. страница, требующая аутентификации. После того, как автоматизированный tc вошел в систему, вы могли бы назвать свою логику преобразования pdf...?