wkhtmltopdf 和基于表单的身份验证

问题描述 投票:0回答:2

我有一个使用基于表单的身份验证的应用程序。我正在尝试获取应用程序中页面的副本并使用 wkhtmltopdf 将其保存为 PDF。

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 是 userid 和 pwd,所以我相信我在命令行中的 post 参数是正确的。

彻底谷歌搜索后,我可以看到提到了 --cookie-jar 参数,但还没有设法弄清楚它的用法,或者即使它会有所帮助。

谢谢

邓肯

pdf-generation wkhtmltopdf
2个回答
4
投票

如果您使用 ASP.NET 表单身份验证,则可以通过一系列

--cookie
参数将当前用户的身份验证 cookie 转发到 wkhtmltopdf。

注意:这不是从 .NET 应用程序启动 wkhtmltopdf.exe 的完整工作代码,而只是如何将 cookie 传递到 wkhtmltopdf 的示例。

有关从 .NET 启动 wkhtmltopdf.exe 的示例,请参阅:如何使用 wkhtmltopdf 将 html 作为字符串传递?

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
投票

此问题现已解决。我使用的是 0.9.9 版本,但无法运行。当我转移到版本 0.10.0 rc2 后,它就工作得很好。

如果其他人正在尝试同样的事情,我使用的代码行如上面所示,我不需要 --cookie-jar 参数。

© www.soinside.com 2019 - 2024. All rights reserved.