我有一个使用基于表单的身份验证的应用程序。我正在尝试获取应用程序中页面的副本并使用 wkhtmltopdf 将其保存为 PDF。
wkhtmltopdf 已安装并且工作正常。我可以从应用程序内成功调用它来生成另一个网站的 PDF,无需身份验证(即 bbc.co.uk)。
我无法让它将用户名/密码传递给应用程序以生成所需页面的副本。相反,我得到了登录屏幕的 PDF 文件。
客户端和服务器都是Windows(分别是7和2008)。我正在使用命令:
wkhtmltopdf.exe --post userid=xxx --post pwd=yyy --ignore-load-errorshttp://url.com/blah/blah/ http://url.com/blah/blah/测试.pdf
其中 xxx 是我的用户名,yyy 是我的密码。我已经浏览过登录页面的源代码,表单字段的 id 是 userid 和 pwd,所以我相信命令行中的 post 参数是正确的。
经过彻底的谷歌搜索后,我可以看到提到了 --cookie-jar 参数,但还没有设法弄清楚它的用法,或者即使它会有帮助。
thanks
Duncan
如果您使用 ASP.NET Forms 身份验证,则可以通过一系列将当前用户的身份验证 cookie 转发到 wkhtmltopdf--cookie
参数。这是假设经过身份验证的使用(您可以从中获取身份验证 cookie)触发 PDF 打印输出。
注意:这不是从 .NET 应用程序启动 wkhtmltopdf.exe 的完整工作代码,而只是如何将 cookie 传递到 wkhtmltopdf 的示例。
有关从 .NET 启动 wkhtmltopdf.exe 的示例,请参阅:如何使用 wkhtmltopdf 将 html 作为字符串传递? https://stackoverflow.com/q/4651373/740639
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)