Захватить содержимое текущей страницы в веб-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...?

Другие вопросы по тегам