Having a problem with wkhtmltopdf. I’m using it to take pdf snapshots of pages on a website that has a username/password page. When the .exe runs, I end up with a snapshot of the login page (running the exe from my own ASP.NET app).
Does anybody know how I would get wkhtmltopdf to log into the site so that it can access the page it needs to take a snapshot of?
wkhtmltopdf is installed in the program files directory on the server and is being called via:
public void HtmlToPdf(string website, string destinationFile)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "wkhtmltopdf.exe";
startInfo.Arguments = website + " " + destinationFile;
Process.Start(startInfo);
}
Thanks! –Dan
THE ANSWER
I couldn’t get the –cookie-jar method to work (see comments), but I did find another way to programmatically log in with the username/password in the querystring.
I pass the username/pw as params in my querystring and try to access the page I want with wkhtml. When the membership provider kicks me out to the login page, I access the params (which are stored in the url as the returnUrl param) via code-behind and authenticate myself. A simple response.redirect, and bingo — I’ve got my PDF snapshot.
// 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.");
}
}
First, check the login form what post parameter it uses
then try –post username xxx –post password xxx. Alternatively use wireshark and record the login process and see what parameters were posted.
Once u are logged in use –cookie-jar
See a better explanation here http://wkhtmltopdf.org/
getting wkhtmltopdf to convert a protected page can be tricky. Use also –extended-help to see other parameters u can use to login. e.g. if the site is protected by basic authentication it should be fairly easy with –user –password