wkhtmltopdf Войдите в веб-приложение asp.net. - PullRequest
7 голосов
/ 10 января 2011

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

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

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

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

Спасибо!--Dan


ОТВЕТ

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

Я передаю имя пользователя / pw в качестве параметров в моей строке запроса и пытаюсь получить доступ к нужной странице с помощью wkhtml.Когда провайдер членства выводит меня на страницу входа в систему, я получаю доступ к параметрам (которые хранятся в URL-адресе как параметр returnUrl) с помощью кода и аутентифицирую себя.Простой response.redirect и бинго - у меня есть мой снимок 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.");
    }
}

Ответы [ 4 ]

2 голосов
/ 23 февраля 2011

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

После того, как вы вошли в систему --cookie-jar

См. Лучшее объяснение здесь http://wkhtmltopdf.org/

получить wkhtmltopdf для конвертации защищенной страницы может быть сложно. Используйте также --extended-help, чтобы увидеть другие параметры, которые вы можете использовать для входа в систему. например если сайт защищен обычной аутентификацией, то это довольно легко сделать с помощью --user --password

0 голосов
/ 10 января 2019

У меня была похожая проблема с моим приложением, которое работает при проверке подлинности с помощью форм ASP.Net. Мне пришлось передать файл аутентификации, как этот, чтобы заставить его работать.

--cookie <name> <value>       

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

0 голосов
/ 13 октября 2014

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

0 голосов
/ 07 марта 2014

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

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

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

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

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

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

...