Вопрос

Возникла проблема с whtmltopdf. Я использую его, чтобы сделать снимки PDF страниц на веб-сайте, имеющем страницу имени пользователя / пароля. Когда запускается .exe, я в конечном итоге с моментальным снимком страницы входа (запуская EXE из моего собственного приложения ASP.NET).

Кто-нибудь знает, как я получаю WKHTMLTOPDF войти в сайт, чтобы он мог получить доступ к странице, который нужно сделать снимок?

WHTMLTOPDF установлен в каталоге программы файлов на сервере и называется через:

public void HtmlToPdf(string website, string destinationFile)
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "wkhtmltopdf.exe";
        startInfo.Arguments = website + " " + destinationFile;
        Process.Start(startInfo);
    }

Спасибо! --Дан


ОТВЕТ

Я не мог получить метод --cookie-jar для работы (см. Комментарии), но я нашел другой способ программно войти в систему с именем пользователя / паролем в криастре.

Я передаю имя пользователя / PW в качестве параметров в моем запросе и пытаюсь получить доступ к странице, который я хочу с WHTML. Когда поставщик членства выходит на страницу входа в систему, я доступа к параметрам (которые хранятся в URL в качестве returnURL PARAR) с помощью кода и аутентификации самостоятельно. Простой ответ .edirect и Bingo - у меня есть мой PDF снимка.

// Check to see if an outside program is trying
// to log in by passing creds in the querystring.
if (Request.QueryString["username"] != null) &&
    Request.QueryString["password"] != null))
{ 
    string user = Request.QueryString["username"];
    string pw   = Request.QueryString["password"];
    if (System.Web.Security.Membership.ValidateUser(user, pw))
    {
        // Create an authentication ticket for wkhtml session
        System.Web.Security.FormsAuthentication.SetAuthCookie(user, false);
        if (Request.QueryString["ReturnUrl"] != null)
        {
            Response.Redirect(Request.QueryString["ReturnUrl"]);
        }
    }
    else 
    {
        throw new Exception("You failed to log in.");
    }
}
Это было полезно?

Решение

Во-первых, проверьте форму входа в систему, какой параметр post он использует, попробуйте --post username xxx --post Password xxx. В качестве альтернативы используйте Wireshark и запишите процесс входа в систему и посмотрите, какие параметры были опубликованы.

Как только вы вошли в систему, используются --cookie-jar

Увидеть лучшее объяснение здесь http://wkhtmltopdf.org/

Получение WKHTMLTOPDF для преобразования защищенной страницы может быть сложно. Используйте также - Texteded - Помощь, чтобы увидеть другие параметры, которые вы можете использовать для входа в систему. Например, если сайт защищен базовой аутентификацией, он должен быть довольно простым с --user --Password

Другие советы

Если кто-то все еще ищет ответ, я напишу краткое резюме того, что я сделал, чтобы он работал.

Во-первых, проверьте страницу, на которую вы хотите войти, например, http:/www.example.com/login

Ищите форму, окружающую вход имени пользователя / пароля. В моем случае я вошел в форму рельсов, поэтому мне также нужен знак подлинности. Как только у вас есть имя и значения входа в систему, вы можете сделать первый звук WHTMLTOIMAGE, как это:

wkhtmltoimage --cookie-jar my.jar --post username steve --post password iscool http://www.example.com/login dummy.jpg

В моем случае формы рельсов мне нужно было также передать Auth_token в качестве параметра пост. Затем просто используйте эту банку Cookie при доступе к главной странице, который вы хотите просмотреть:

wkhtmltoimage --cookie-jar my.jar http://example.com/myprofile screenshot.jpg

Другой способ - сделать вид на веб-сайту к строке HTML и сохранить временно в локальный файл. Затем используйте WHTMLTOPDF для преобразования этого файла HTML в PDF, затем удалите этот локальный файл позже. Таким образом, нам не нужно обрабатывать аутентификацию MVC.

У меня была подобная проблема с моим приложением, которое работает на аутентификации ASP.NET Forms. Я должен был пройти в аутентификации Cookie, подобное это, чтобы заставить его работать.

--cookie <name> <value>       

Важным уловом является то, что никакие дополнительные файлы cookie не должны передаваться отдельно от Cookie Auth. Потому что некоторые файлы cookie с причиной аутентификации, чтобы провалиться и даже если это не замедляет процесс WHTML, потому что WHTML придется обрабатывать каждое файло cookie к нему

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top