wkhtmltopdf и аутентификация на основе форм - PullRequest
4 голосов
/ 11 августа 2011

У меня есть приложение, которое использует аутентификацию на основе форм. Я пытаюсь взять копию страницы в приложении и сохранить ее в PDF с помощью wkhtmltopdf.

wkhtmltopdf установлен и работает нормально. Я могу успешно вызвать его из приложения, чтобы создать PDF-файл другого веб-сайта без аутентификации (например, bbc.co.uk).

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

Клиент и сервер работают под управлением Windows (7 и 2008 соответственно). Я использую команду:

wkhtmltopdf.exe --post userid = xxx --post pwd = yyy --ignore-load-errors http://url.com/blah/blah/ test.pdf

Где xxx - мое имя пользователя, а yyy - мой пароль. Я прошел через страницу входа в систему, и идентификаторы полей формы - это ID пользователя и PWD, поэтому я считаю, что у меня правильные параметры записи в командной строке.

После тщательного поиска в Google я вижу упоминания о параметре --cookie-jar, но не смог отработать его использование, или даже если это поможет.

спасибо

Duncan

Ответы [ 2 ]

3 голосов
/ 30 октября 2013

Если вы используете проверку подлинности с помощью форм ASP.NET, вы можете переслать файлы cookie проверки подлинности текущего пользователя в файл wkhtmltopdf с помощью последовательности --cookie аргументов. Предполагается, что использование с проверкой подлинности (от которого вы можете получить файлы cookie для проверки подлинности) запускает распечатку PDF.

Примечание. Это не полный рабочий код для запуска wkhtmltopdf.exe из приложения .NET, а просто пример передачи файлов cookie в wkhtmltopdf.

Пример запуска wkhtmltopdf.exe из .NET см .: Как передать html как строку, используя wkhtmltopdf?

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "wkhtmltopdf.exe";

string cookieArgs = "";
var cookies = HttpContext.Current.Request.Cookies;

if (cookies != null)
{
    var sb = new System.Text.StringBuilder();

    // you probably only need the ".ASPXFORMSAUTH" 
    // and "ASP.NET_SessionId" cookies
    // but I pass everything just in case
    foreach (string key in cookies.AllKeys)
    {
        string value = cookies[key].Value;
        sb.AppendFormat("--cookie {0} {1} ", key, value);                    
    }
    cookieArgs = sb.ToString();
}

psi.Arguments = urlToPrint + " -q " + cookieArgs + " -"; 
Process.Start(psi);
1 голос
/ 12 августа 2011

Эта проблема теперь решена. Я использовал версию 0.9.9 и не смог заставить ее работать. Как только я перешел на версию 0.10.0 rc2, все заработало нормально.

Если кто-то еще пытается сделать то же самое, строка кода, которую я использовал, была такой же, как и выше, мне не нужен параметр --cookie-jar.

...