Создание PDF за стендом аутентификации

Я пытаюсь создать PDF файл с использованием WKHTMLTOPDF, который требует, чтобы я сначала входила в систему. Там некоторые из них в Интернете уже, но я не могу заставить себя работать. Я в Терминале - ничего необычного.

Я пробовал (среди множества других вещей):

/usr/bin/wkhtmltopdf --post username=myusername --post password=mypassword "URL to Generate" test.pdf

/usr/bin/wkhtmltopdf --username myusername --password mypassword "URL to Generate" test.pdf

/usr/bin/wkhtmltopdf --cookie-jar my.jar --post username=myusername --post password=mypassword "URL to Generate Cookie For"

имя пользователя и пароль являются значениями id и name полей ввода в форме. Я получаю файл my.jar, но ничего не написано.

Конкретные вопросы:

  • Должен ли я указывать страницу входа в систему и/или действие формы где угодно?
  • параметр -cookie-jar упоминается в разных местах (как по необходимости, так и по-другому). Если это необходимо, как это работает? Я создал файл my.jar, но как его использовать? Реферирование:

http://code.google.com/p/wkhtmltopdf/issues/detail?id=356


EDIT:

Неужели кто-то сделал это успешно? Хороший способ продемонстрировать пример может, если кто-то захочет заставить его работать на каком-то популярном веб-сайте, который требует учетных данных для устранения потенциальной переменной.

Ответ 1

Я думаю, что форма, к которой я пытаюсь войти, слишком сложна. Он защищен, устанавливает три файла cookie, перенаправляет дважды и отправляет ряд других переменных вне имени пользователя и пароля, для одного из которых требуется значение cookie (я даже попытался связать значение с переменной post, но не повезло). Вероятно, это довольно редкая проблема - отнюдь не ошибка WKHTMLTOPDF.

Я запустил CURL для входа в систему и записи страницы в локальный файл, а затем выполнил WKHTMLTOPDF. Определенно сплошная работа для тех, кто имеет аналогичную проблему.


Изменить: CURL, если интересно:

curl_setopt($ch, CURLOPT_HEADER, 1); # Change to 1 to see WTF
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_URL, $loginUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

Ответ 2

Каждая форма входа будет отличаться для каждого сайта. То, что вам нужно сделать, - это определить, что вам нужно пройти, чтобы перейти к таргетингу в форме входа в систему, прочитав HTML на странице (о чем вы, вероятно, знаете). Может потребоваться дополнительное скрытое поле поверх полей имени пользователя и пароля, чтобы предотвратить подделки запросов на межсайтовый сайт.

Параметр cookie jar - это файл, в котором хранятся файлы cookie, которые он возвращает с веб-сервера. Вам нужно указать его в первом запросе формы входа в систему и в последующих запросах продолжать использовать информацию о файле cookie/сеансе что веб-сервер вернет вас после входа в систему.

Итак, чтобы подвести итог:

  • Посмотрите, есть ли дополнительные параметры на требуемой странице.
  • Убедитесь, что URL-адрес, который вы отправляете, совпадает с атрибутом ACTION элемента формы на этой странице.
  • Используйте параметр -cookie-jar как в запросе на вход, так и во втором запросе содержимого.
  • Синтаксис параметров -post - имя пользователя_пользователя user_name_value -post password password_value

Ответ 3

Вам может быть интересно попробовать сделать PDF с помощью phantomjs.

phantomjs rasterize.js http://blah.com/ webgl.pdf

Здесь вы можете найти rasterize.js здесь. В принципе, вы пишете javascript для входа на страницу входа в систему, затем вы создаете PDF файл.

Однако выход не совпадает с wkhtmltopdf. Вы можете просто сохранить HTML в файл, а затем сделать с помощью wkhtmltopdf, если вывод PDF файла phantomjs слишком ужасен.